Connectez Raspberry Pi à Alibaba Cloud IoT Platform avec «Python»

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. image.png

  1. Raspberry Pi 3B avec Wi-Fi et Bluetooth 2, module de température et d'humidité DHT11 3, module LED

Étape 1: Installez le système d'exploitation pour Raspberry Pi

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)

Étape 2: Installez le SDK Python

Installez le SDK Python pour la plate-forme cloud Alibaba

Exécutez la commande suivante.

pip install aliyun-python-sdk-iot-client

Étape 3: écrire le code

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. image.png

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. image.png 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))) image.png

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é. image.png

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. image.png

À 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. image.png

Nous effectuons des tests de distribution de données sur le panneau de débogage en ligne des produits cloud. image.png 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

Connectez Raspberry Pi à Alibaba Cloud IoT Platform avec «Python»
Connectez-vous à MySQL avec Python sur Raspberry Pi
Surveiller la température à l'aide de la plate-forme IoT cloud Raspberry Pi + Alibaba
Connectez-vous à Wikipedia avec Python
IoT facile pour démarrer avec Raspeye et MESH
Mettre à jour Raspberry Pi Python vers 3.7 ou version ultérieure avec pyenv
Utilisez vl53l0x avec RaspberryPi (python)
[Raspberry Pi] Changement par défaut de Python en Python3
Comment se connecter à Cloud Firestore à partir de Google Cloud Functions avec du code Python
Connectez deux caméras USB au Raspberry Pi 4
Connectez-vous à s3 avec AWS Lambda Python
Connectez-vous à Pepper avec l'interpréteur Python de PEPPER Mac
Travailler avec le GPS en Python pour Raspberry Pi 3
Comment télécharger des fichiers sur Cloud Storage à l'aide de Python [Créer une caméra à point fixe avec Raspberry PI # 1]
Festival Alexa fait à la main! Sans serveur, invitation à l'IoT + Voice. Raspeye + Alexa Voice Servce (Python)
Utilisez python sur Raspberry Pi 3 pour éclairer la LED avec le contrôle du commutateur!
J'ai essayé de faire un signal avec Raspeye 4 (édition Python)
Connectez votre base de données SQL Server à Alibaba Cloud Function Compute à l'aide de Python
Discord bot raspberry pi zéro avec python [Note]
Comment utiliser Raspeye Pie Camera Python
J'ai essayé L-Chika avec Razpai 4 (édition Python)
Connectez votre Raspberry Pi à votre smartphone en utilisant Blynk
Suivi GPS avec Raspeye 4B + BU-353S4 (Python)
Mesurer la température du processeur de Raspeye avec Python
Essayez d'utiliser le processeur à 4 cœurs du Raspberry Pi 2 avec Parallel Python
GPGPU avec Raspberry Pi
DigitalSignage avec Raspberry Pi
De la configuration du Raspberry Pi à l'installation de l'environnement Python
Essayez de déboguer Python sur Raspberry Pi avec Visual Studio.
Ubuntu 20.04 sur raspberry pi 4 avec OpenCV et utilisation avec python
Sortie sur "LED 7 segments" en utilisant python avec Raspberry Pi 3!
Afficher l'image de la caméra USB avec OpenCV de Python avec Raspeye
Exploitons GPIO de Raspeye avec Python CGI
Introduction facile au piratage domestique avec Raspberry Pi et discord.py
API Nifty Cloud facile à utiliser avec botocore et python
Débutant Python s'ouvre et se ferme avec Raspberry Pi
[Raspberry PI & Garmin GLO] Jusqu'à ce que le GPS Bluetooth soit connecté à Raspberry PI & Garmin GLO
Publiez sur Slack avec Python 3
J'ai essayé d'exécuter Movidius NCS avec python de Raspberry Pi3
J'ai parlé à Raspberry Pi
Présentation de PyMySQL à Raspberry pi3
Exécutez l'exemple de code python BNO055 avec I2C (Raspberry Pi 3B)
Comment télécharger des fichiers sur Cloud Storage avec le SDK Python de Firebase
Raspeye + Python + Mémo OpenGL
SSD 1306 OLED peut être utilisé avec Raspeye + python (Remarque)
Connectez-vous à sqlite depuis python
Basculer python vers 2.7 avec des alternatives
Écrire en csv avec Python
getrpimodel: Reconnaître le modèle Raspberry Pi (A, B, B +, B2, B3, etc.) avec python
raspberry pi 1 modèle b, python
Premiers pas avec Heroku-Viewing Hello World en Python Django avec Raspberry PI 3
Contrôlez le moteur avec un pilote de moteur en utilisant python sur Raspberry Pi 3!
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
Je veux exécuter l'interface graphique Python au démarrage de Raspberry Pi
Utilisez python sur Raspberry Pi 3 pour éclairer la LED (Hello World)
Créez votre propre plateforme IoT en utilisant raspberrypi et ESP32 (partie 1)