Coucou Jean-Marie.
Veloce a écrit :
Heu non, ce n'est pas ce que j'en comprends. On dirait plutôt un modèle où le Raspberry Pi
est relié en réseau par le bus I2C à une batterie d'Arduinos qui commandent chacun des moteurs,
des servos, des capteurs... Plutôt pour les gros projets avec plein d'E/S donc.
Veloce
Je suis abonné à la revue Electronique pratique et dans le N° 130 il est écrit page 4 je site:
'cette approche nous permet d'écrire des programmes qui fonctionnent à la fois sur Arduino et sur Rasbperry PI sans modification'
c'est basé sur des librairies que l'on peut utiliser avec les deux environnements.
MQTT avec Raspberry esp8266 nodemcu et Lua:
J’ai fait quelques essais sur Mqtt pour en comprendre le principe.
Installation sur Raspbberry des packages Mosquitto:
Code : Tout sélectionner
sudo apt-get install mosquitto mosquitto-clients python-mosquitto
Mosquitto est un serveur Mqtt (Broker).
Mosquitto-clients installe le client Mqtt ‘mosquitto_sub’
Python-mosquitto ajoute la partie Python.
Pour commencer avant de configurer le serveur sur le Rasberry, on peut simplement d’utiliser le serveur de test de Mosquitto « test.mosquitto.org ».
Il n'y a pas de compte à créer sur mosquito.org et aucun paramétrage n'est nécessaire pour lancer des tests.
On lance en premier le client Mqtt : mosquitto_sub en lui demandant de se mettre à l’écoute d’un ensemble de Topics dans l’exemple, SMBA38 et les sous topics de SMBA38 (en utilisant le #):
Ensuite on lance dans une autre console, plusieurs fois le client Mqtt pour publier des valeurs sur ce même Topic
Et voici les traces, en premiers trois publications du publisher (option –m):
Code : Tout sélectionner
pi@raspberrypi:~$ mosquitto_pub -h test.mosquitto.org -t SMBA38/temps/Ext -m 17
pi@raspberrypi:~$ mosquitto_pub -h test.mosquitto.org -t SMBA38/temps/Ext -m 15
pi@raspberrypi:~$ mosquitto_pub -h test.mosquitto.org -t SMBA38/temps/Int -m 21
Et voici les données affichées par le subscripteur (option –v).
Les données arrivent immédiatement après leur publication.
Code : Tout sélectionner
pi@raspberrypi:~$ mosquitto_sub -h test.mosquitto.org -t "SMBA38/#" -v
SMBA38/temps/Ext 17
SMBA38/temps/Ext 15
SMBA38/temps/Int 21
Dans cet exemple on n’utilise pas de nom d’utilisateur et de mot de passe, les transmissions ne sont pas codées.
La Qos (qualité de service n’est pas utilisée).
Si on lance la commande : mosquitto_sub -h test.mosquitto.org -t "#" –v
On récupère tous les topics du serveur de Test( même ceux non créés par nous même).
Je suppose que Mosquitto utilise l’adresse IP pour nous identifier.
Et maintenant avec Lua comme client:
Le code
Code : Tout sélectionner
m=mqtt.Client("test", 30,"","")
m:lwt("/lwt", "offline", 0, 0)
-- Evénements
m:on("connect", function(con) print ("Connexion OK") end)
m:on("offline", function(con) print ("offline") m:close() end)
m:on("message", function(conn, topic, data)
if data ~= nil then
print("réception topic: ".. topic .. ":" .. data) end end)
-- Connexion + écoute + envoi
m:connect("test.mosquitto.org", 1883, 0, function(conn) print("Connexion lancée")
m:subscribe("SMBA38/#",1, function(conn) print("Subscription OK, je suis à l'écoute")
m:publish( "SMBA38/temps/ext",15,0, 0,function(conn) print ("SMBA38/temps/ext publié")
end)
end)
end)
Et la trace dans la console Lua
Code : Tout sélectionner
dofile("mqtt_mosquitto.lua")
> Connexion lancée
Subscription OK, je suis à l'écoute
SMBA38/temps/ext publié
réception topic: SMBA38/temps/ext:15
réception topic: SMBA38/temps/Int:21
offline
Dans le même code on teste :
le subscripteur (mis en premier pour recevoir les données du publisher)
Le publisher.
La valeur : ‘réception topic: SMBA38/temps/Int:21’
Correspond à une valeur publiée en même temps que le test avec Lua depuis le Raspberry par :
Code : Tout sélectionner
mosquitto_pub -h test.mosquitto.org -t SMBA38/temps/Int -m 21
Dans la vraie vie, il y aura plusieurs esp8266, un qui envoie des données et un (ou plusieurs) qui les traite.
Il est donc très facile en quelques lignes de Lua de mettre à jour la base de données d’un Broker, ce broker publiant immédiatement les données.
Dans le code Lua, il n’y a pas la partie connexion au WIFI.
Dans la mémoire Flash les paramètres de configuration WIFI sont conservés.
Si l’on utilise un flasher pour réintialiser un esp8266, la configuration WIFI est perdue.
Sauf si l’on ne flashe que la partie utilisateur (Commandes AT ou Lua) en conservant le SDK et la configuration WIFI.
C'est pour cette raison que certains firmwares esp8266 sont à flasher en plusieurs parties.
Par exemple Frankenstein pour ne pas le citer:
https://github.com/nekromant/esp8266-fr ... n/issues/4
Address___Size______Name__________________Description
00000h___ 248k______app.v6.flash.bin_________User application
3E000h___ 8k________master_device_key.bin___OTA device key
40000h___ 240K______app.v6.irom0text.bin____ SDK libraries
7C000h___ 8k________esp_init_data_default.bin_Default configuration
7E000h___ 8k________blank.bin_______________Filled with FFh May be WiFi configuration.
J’ai eu quelques problèmes en ajoutant en tête de chaque code la connexion au WIFI.
ça marche mieux si on ne connecte qu’une seule fois par du code le WIFI pour initialiser la configuration WIFI.
Il existe plusieurs Clients MQTT pour Windows, Apple, Linux, Smartphones voir .
http://www.hivemq.com/seven-best-mqtt-client-tools/
Je pense que sous peu les commandes AT seront compatibles Mqtt.
Le port utilisé par défaut est le 1883.
Je me pose quelques questions :
Comment relire des données publiées lorsque le Subscripteur n’était pas à l’écoute.
Comment mettre en place la sécurité (gestion des certificats).
Utilisation de la Qos pour être sur que les messages sont bien reçus.
Il me reste à configurer le Broker coté Raspberry pour se passer du serveur de test de Mosquitto.
A+
SMBA38.