Spark Core: Faire des appels sur votre Core à partir de Python

Nous avons déjà abordé la lecture d'une entrée digitale sur le Core et la publication d'une variable sur le Cloud (voir les quelques articles précédents).

Nous avons bien entendu complété nos tutoriels avec l'utilisation d'un contact reed/magnétique, lecture de température avec TMP36 (voir nos tutoriels Spark Core sur wiki.mchobby.be).

Utiliser un Spark Core avec Raspberry-Pi
Ce qui nous tient à coeur depuis un petit moment, c'est de contacter et contrôler notre Spark Core par l'intermédiaire d'un Raspberry-Pi.
De quoi faciliter la réalisation de projet Domotique par les Makers... et comme le langage de prédilection sur le Pi est Python, nous nous sommes mis en tête d'écrire une bibliothèque pour faciliter les accès à votre Core par l'intermédiaire de l'API du Spark Cloud.

PyCall
PyCall est le code Python que nous avons publié sur GitHub.
PyCall, ce sont des exemples utilisant la classe Python SparkApi pour accéder à l'API de Spark Cloud et la classe SparkCore pour adresser directement un core.


https://github.com/mchobby/SparkCoreTuto

Nous avons bardé le répertoire d'exemple python exploitant les classes et démontrant qu'il est simple de prendre le contrôle de votre Spark Core depuis un Raspberry-Pi (ou n'importe quel OS capable d'exécuter du code Python).

Nous avons également placé une copie des programmes "Arduino" utilisés sur le Spark Core... puisque c'est avec ces programmes que nos scripts Python vont s'adresser.
Nous avons également un script python core-tinkering.py spécifique pour contrôler le Core avec son programme par défaut (Tinker, celui installé en usine).

Parmi les exemples, vous trouverez les fichiers:
  • /sparkapi/sparkapi.py - contient les classes SparkApi et SparkCore pour simplifier les appels sur vos Cores via Spark Cloud
  • sparkapi.ini - fichier de config pour la connexion sur Spark Cloud.
  • netled.py - fait des appels de fonction sur le core pour controler des LED sur le core via le programme netled.ino
  • lecture-tmp36.py - fait des lectures de variable sur le core pour lire la valeur du senseur de température tmp36. Voir le programme lecture-tmp36.ino
  • buttoncounter.py - fait des appels sur un core faisant fonctionner le programme buttoncounter.ino.
  • magneticswitch.py - fait des appels sur un core faisant fonctionner le programme magneticswitch.ino
  • core-info.py - Obtenir plus d'information sur un core. Les fonctions et les variables publiées.
  • cores-list.py - Lister les cores associé à votre compte Spark Cloud
  • core-tinkering.py - Comment définir une classe SparkCoreTinker et utiliser ses méthodes pour faciliter les appel sur l'API publié par le Spark Core. Exemple basé sur Tinker de SPARK :-) Vous pouvez donc contrôler directement Tinker depuis Python :-)
SparkApi.ini
Pour vous connecter sur l'API du Spark Cloud, vous avez besoin d'un access_token. Et pour vous connecter sur votre Core, vous aurez besoin du Core ID.
Plutôt que de hardcoder ces valeurs (celles de MCHobby) dans les exemples et les programmes, j'ai opté pour un fichier de configuration (SparkApi.ini) dans lequel vous devrez placer les valeurs adéquates (les vôtres bien entendu).
Ce fichier est lu à l'aide d'une simple classe Config créée dans ce but.

Bien entendu, Je n'ai pas publié mon fichier SparkApi.ini. 
Vous devez donc créer ce fichier SparkApi.ini à partir de sparkapi-sample.ini (disponibles dans les sources) et y encoder les paramètres de votre PROPRE compte Spark Cloud et le CORE_ID de votre propre Spark Core.

Voici une copie du fichier sparkapi-sample.ini
# Copiez le contenu de ce fichier dans sparkapi.ini et
# adaptez les valeur access_token et core0 en fonction de votre propre
# compte Spark Cloud :-)
[SPARK-API]
# votre access token lié à votre compte Spark Cloud voir notre tuto
# http://wiki.mchobby.be/index.php?title=Spark-Core-NetLED#Faire_une_requ.C3.AAte_sur_l.27API
# pour identifier votre core_id et access_token
access_token=123412341234
[CORES]
# Liste de un ou plusieurs de vos spark cores ici
# Vos cores sont lié à votre compte Spark Cloud (et donc votre access_token).
# Voyez notre tuto pour identifier les core_id
# http://wiki.mchobby.be/index.php?title=Spark-Core-NetLED#Faire_une_requ.C3.AAte_sur_l.27API
core0=0123456789abcdef

Un petit exemple - buttoncounter.py
Nous avons déjà présenté le progamme buttoncounter.ino (celui qui fonctionne sur le code).
Voici un programme qui permet d'accéder à la variable "counter" et la fonction "reset" publié par le programme buttoncounter.ino sur le Core.

Ce programme est très abondamment (trop) documenté pour faciliter la prise en main.

Pour lire la valeur d'une variable publiée, il suffit d'appeler
value = core.value_of( 'counter' ) 

Et pour faire l'appel d'une fonction publiée sur le core, il suffit d'appeler
result = core.call( 'reset' )


#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
"""buttoncounter.py

Appel d'API sur un Spark Core faisant fonctionner le programme
  buttoncounter.ino 
  
  retourne la valeur du compteur. Demande un reset du compteur sur
  le spark core lorsque sa valeur dépasse 5.

Copyright 2015 DMeurisse 

Voir tutoriel:
  http://wiki.mchobby.be/index.php?title=Spark-Core-Bouton
     
Ou acheter Spark Core -- et soutenir nos travaux --

   http://shop.mchobby.be/category.php?id_category=54

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
  
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
  
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
MA 02110-1301, USA.

------------------------------------------------------------------------
History:
  01 jan 2015 - Dominique - v 0.1 (première release)
"""  
from sparkapi.sparkapi import SparkApi
from sparkapi.config import Config 

# Ouvre le fichier sparkapi.ini pour éviter de Hard Coder des données
# sensible comme l'access_token dans les programmes d'exemple publié sur
# le Net.
# 
# Créez votre propre fichier sparkapi.ini à partir du fichier 
# sparkapi-sample.ini
config = Config()


def main():
 # Execute le programme qui récupère le nombre de pression sur 
 #  le Spark Core
 api = SparkApi( access_token = config.access_token, debug = False )
 # ou utiliser directement votre access_token
 #api = SparkApi( access_token = '123412341234', debug = False )
  
 # Créer un objet Core à partir du core_id 
 #   le core_id provient du fichier de configuration sparkapi.ini
 #   dans la section [CORES]
 core = api.get_core( config.cores['core0'] ) 
 # ou utiliser directement votre core_id
 #core = api.get_core( '0123456789abcdef' )
 
 # Lire une variable sur le core
 # retourne un tuple (connected, valeur)
 value = core.value_of( 'counter' )
 
 if( value[0] == False ):
  print( 'le Core n est pas connecté' )
 else:
  print( 'compteur = %i' % value[1] )
 
 # Si connecté et 'valeur > 5' ???
 if( value[0] and value[1]>5 ):
  print( 'Envoyer ordre "reset" compteur' )
  # Faire un reset du compteur sur le core.
  # En utilisant sa fonction "reset" publier sur Spark Cloud
  result = core.call( 'reset' ) 
  print( "connecté=%s, résultat=%i" % result ) 
  if( result[0] == False ):
   print( 'le Core n est pas connecté' )
  else:
   print( 'La fonction à répondu %i' % result[1] )
 
 return 0

if __name__ == '__main__':
 main()


Comment installer
L'installation se fait à l'aide du programme git

git clone  https://github.com/mchobby/SparkCoreTuto.git
cd SparkCoreTuto
cd PyCall
cp sparkini-sample.ini sparkapi.ini

Vous devez éditer le fichier sparkapi.ini pour y indiquer votre access_token et core_id .

nano sparkapi.ini

Ensuite, vous pouvez simplement tester les différents scripts pythons.
Pourquoi ne pas commencer par celui qui liste vos cores et leur interfaces.
./cores-list.py

Où acheter
MC Hobby propose une gamme Spark Core
Tutoriel
Le wiki de MCHobby dispose de nombreux tutoriels pour Spark Core.
MCHobby investi du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.