Dans cet article, MVP Liu Hongfeng partage son expérience de connexion d'un appareil Raspberry Pi au cloud à l'aide de la plate-forme Alibaba Cloud IoT.
Écrit par Hongfeng Liu, MVP d'Alibaba Cloud ci-dessous.
Je suis Alibaba Cloud MVP et Alibaba Cloud IoT Platform Je suis honoré d'être la première personne à tester / iot) du point de vue de l'utilisateur. Je connais Alibaba Cloud IoT Platform et depuis le début le matériel de Feifeng Platform (prédécesseur de Link Develop, une plateforme de développement à guichet unique). J'ai eu l'occasion de participer à des travaux d'accès. J'ai également vu l'équipe Alibaba Cloud IoT passer rapidement de dizaines à des centaines. Le contenu hébergé sur cette plateforme IoT s'est également développé rapidement, avec la version de base du kit de développement IoT "Hien", la plateforme de développement unique "Link Develop", la version avancée du kit de développement IoT "Hien", "Flying", etc. Il y avait "City Brain", "Agricultural Brain", "Industrial Interconnection Platform" et ainsi de suite. Par conséquent, il est difficile de rattraper chaque produit IoT d'Alibaba Cloud et de le comprendre pleinement.
Au départ, nous avons utilisé la plate-forme à puce unique + .NET MF du MCU et implémenté le code correspondant pour connecter la plate-forme cloud Alibaba directement à l'aide du protocole MQTT. La plate-forme IoT peut également être connectée de manière flexible en fonction de la configuration, mais certains développeurs WEB, AI et cloud ne la connaissent pas encore. En raison de ces exigences, des langages avancés tels que JS, Java et Python sont entrés dans le développement matériel et peuvent désormais s'exécuter directement sur la puce MCU, accélérant considérablement la connexion entre le cloud et les appareils IoT. C'était.
Dans cet article, j'ai essayé de connecter le cloud et les appareils IoT basés sur Raspberry Pi à l'aide de Python, qui est un langage avancé. [Article précédent](https://www.alibabacloud.com/blog/developing-apps-on-alibaba-cloud-iot-platform-with-raspberry-pi-and-node-js_594346?spm=a2c65.11461447.0. 0.497c7a71qSel56) a présenté comment l'exécuter à l'aide de Node.js.
Vous trouverez ci-dessous le matériel de test fourni par l'équipe Alibaba Cloud.
Vous devez installer le système d'exploitation du Raspberry Pi.
J'ai le firmware Raspbian installé, mais vous pouvez l'installer en suivant les étapes fournies ici: [https://www.yuque.com/cloud-dev/iot-tech/ig269q](https: // www.yuque.com/cloud-dev/iot-tech/ig269q?spm=a2c65.11461447.0.0.497c7a71iYpNQM)
Installez le SDK Python pour la plate-forme cloud Alibaba
Exécutez la commande suivante.
pip install aliyun-python-sdk-iot-client
Après avoir installé le firmware Raspbian et le SDK Python, vous devez écrire le code en Python pour exécuter le projet. Un exemple de code provient de la documentation Alibaba Cloud Platform ([https://www.yuque.com/cloud-dev/iot-tech/rz6fpl](https://www.yuque.com/cloud-dev/iot-tech/rz6fpl] Déjà fourni dans? Spm = a2c65.11461447.0.0.497c7a71iYpNQM)), la fonctionnalité est relativement simple, il suffit d'envoyer deux nombres aléatoires dans le cloud.
Nous concevons un scénario relativement complexe qui réalise d'abord une communication bidirectionnelle afin que les données des capteurs puissent être envoyées vers le cloud et que les commandes puissent être envoyées depuis le cloud pour contrôler les appareils associés.
Pour le téléchargement des données, nous avons sélectionné le vrai capteur DHT11 qui peut acquérir des valeurs de température et d'humidité. Il existe également un module LED qui contrôle l'état marche / arrêt de la lumière avec des commandes envoyées depuis le cloud.
Le diagramme de définition des broches de Raspberry Pi est le suivant.
Le module DHT11 se compose de trois lignes appartenant à une communication par bus unique. La ligne d'alimentation est connectée à 5V-4pin, la ligne de masse est connectée à GND-6pin et la broche de communication est connectée à GPIO16-36pin. Le module LED se compose également de trois lignes. La ligne d'alimentation est connectée à 3V3-1pin, la ligne de masse est connectée à GND-9pin et la ligne de commande est connectée à GPIO4-7pin. Le contrôle des LED peut être obtenu relativement facilement en contrôlant simplement les niveaux haut et bas des broches.
led_pin = 4 //GPIO is 4
GPIO.setmode(GPIO.BCM) //GPIO definition of BCM
GPIO.setup(led_pin, GPIO.OUT) //Set to output mode
Allume la lumière:
GPIO.output(led_pin, GPIO.HIGH)
Turn off the light:
GPIO.output(led_pin, GPIO.LOW)
DHT11 est relativement complexe. Pour plus d'informations, consultez le billet de blog que j'ai écrit en 2010 (Lien connexe: https://blog.csdn.net/yfiot/article/details/5996524 / article / détails / 5996524)))
En raison de la grande quantité de code, il est présenté sous la forme d'une fonction qui renvoie deux valeurs de température (T) et d'humidité (H) en même temps.
De nombreux exemples basés sur Python sur Internet lisent une fois la température et l'humidité. Si vous voulez lire en continu, vous devez régler l'intervalle de temps à environ 3 secondes, sinon cela échouera facilement. Puisque Linux n'est pas en temps réel, nous avons constaté que même avec un intervalle de temps de 3 secondes, nous ne pourrons peut-être pas obtenir les valeurs de température et d'humidité correctes, et nous pourrions obtenir les mauvaises valeurs qui ont passé la vérification.
Puisque la broche de données de DHT11 est connectée à GPIO16, le code de broche est défini comme suit.
dht_pin =16
The code that encapsulates the function is as follows:
def GetDTH():
data = []
j = 0
GPIO.setup(dht_pin, GPIO.OUT)
GPIO.output(dht_pin, GPIO.LOW)
time.sleep(0.02)
GPIO.output(dht_pin, GPIO.HIGH)
GPIO.setup(dht_pin, GPIO.IN)
while GPIO.input(dht_pin) == GPIO.LOW:
continue
while GPIO.input(dht_pin) == GPIO.HIGH:
continue
while j < 40:
k = 0
while GPIO.input(dht_pin) == GPIO.LOW:
continue
while GPIO.input(dht_pin) == GPIO.HIGH:
k += 1
if k > 100:
break
if k < 8:
data.append(0)
else:
data.append(1)
j += 1
humidity_bit = data[0:8]
humidity_point_bit = data[8:16]
temperature_bit = data[16:24]
temperature_point_bit = data[24:32]
check_bit = data[32:40]
humidity = 0
humidity_point = 0
temperature = 0
temperature_point = 0
check = 0
for i in range(8):
humidity += humidity_bit[i] * 2 ** (7-i)
humidity_point += humidity_point_bit[i] * 2 ** (7-i)
temperature += temperature_bit[i] * 2 ** (7-i)
temperature_point += temperature_point_bit[i] * 2 ** (7-i)
check += check_bit[i] * 2 ** (7-i)
tmp = humidity + humidity_point + temperature + temperature_point
if check == tmp:
return temperature,humidity
else:
print "wrong"
return 0,0
Une fois ces préparatifs terminés, nous définirons les produits et appareils pertinents dans le cloud. Contrairement à l'exemple officiel fourni par Alibaba Cloud, nous avons ajouté une LED d'attribut lisible et inscriptible et utilisé une variable d'énumération où 0 est désactivé et 1 est activé.
Une fois ces préparatifs terminés, nous définirons les produits et appareils pertinents dans le cloud. Contrairement à l'exemple officiel fourni par Alibaba Cloud, nous avons ajouté une LED d'attribut lisible et inscriptible et utilisé une variable d'énumération où 0 est désactivé et 1 est activé.
client.on_message = on_message
En d'autres termes, vous pouvez extraire les informations du cloud.
Le contenu informationnel poussé par le cloud est le suivant.
{"method":"thing.service.property.set","id":"169885527","params":{"LED":1},"version":"1.0.0"}
Nous devons obtenir la valeur de la LED, nous devons donc ajouter quelque chose à la fonction on_message.
setjson = json.loads(msg.payload)
led = setjson['params']['LED']
GPIO.output(led_pin,(GPIO.HIGH if led==1 else GPIO.LOW ))
Il s'allume et s'éteint en fonction de la valeur de la LED.
Après avoir modifié le code pertinent, téléchargez-le sur votre appareil Raspberry Pi et commencez à fonctionner, comme indiqué dans la figure suivante.
À ce stade, si vous vérifiez l'état de l'appareil cloud, vous pouvez voir que les données ont été chargées normalement dans le cloud.
Nous effectuons des tests de distribution de données sur le panneau de débogage en ligne des produits cloud. Envoyez 0 ou 1 pour voir si le voyant est éteint ou allumé.
En général, vous constaterez que le code IoT est facile à écrire en utilisant le langage Python familier.
Recommended Posts