Un guide pour faire de l'IoT avec MicroPython facilement jusqu'à la dernière minute

Cet article est le deuxième jour du Calendrier de l'avent Python Partie 2 2019. Le premier jour était le remplacement de chaîne avancé de @ ssh-22 avec re.sub.


Avec la naissance d'Arduino et de Raspberry Pi, l'écosystème se met rapidement en place dans le domaine de l'IoT, mais bien que Raspberry Pi puisse être implémenté en Python, Arduino est extrêmement plus facile à utiliser pour un peu de contrôle électronique. Cependant, certaines personnes peuvent vouloir écrire dans le Python familier au lieu du langage Arduino (comme C / C ++). Dans cet article, j'aimerais écrire un guide pour démarrer facilement le développement à l'aide de MicroPython, qui est un Python intégré, au sens financier également.

Quoi préparer

--Arduino …… pas la carte de développement ESP32 --San Hayato Nouvelle planche à pain SAD-101

L'environnement de travail est macOS + Python3.

Carte de développement ESP32

Dans le domaine récent d'Arduino, le même environnement de développement qu'Arduino peut être utilisé, et ESP32 qui peut utiliser Wifi / Bluetooth est devenu le courant dominant (ce n'est pas exactement Arduino, mais il peut être utilisé presque de la même manière). L'ESP32-DevKit C et les produits compatibles, généralement plus sophistiqués que l'Arduion UNO standard mais moins chers, sont souvent utilisés.

Si vous êtes pressé, Akizuki Denshi ESP32-DevKitC pour 1 480 yens ou Switch Science [ESPr Developer 32](https: //www.switch) pour 2 200 yens -science.com/catalog/3210/) Procurons-nous.

Cependant, je recommande personnellement les achats à l'étranger tels que aliexpress. Cette fois, nous avons levé ici pour 436 yens. Le prix est de 1/3. Cependant, il a fallu environ 3 semaines pour arriver. Si vous pouvez l'acheter pour environ 1500 yens, vous pouvez l'acheter au Japon, mais si vous ne vous dépêchez pas, ce sera 1/3 du prix car le travail électronique casse des pièces et il est difficile de le réutiliser si vous l'utilisez pour faire quelque chose. Il est recommandé d'en acheter trois à. Pour ceux qui ne veulent pas payer par carte de crédit par correspondance à l'étranger, il existe d'autres sites tels que banggood où paypal peut être utilisé, mais comme la différence de prix est faible avec un achat national, il peut être préférable de l'acheter au Japon. Pourtant, c'est moins de la moitié du prix du Raspberry Pi.

(Ajout) Si vous y réfléchissez, vous pouvez l'acheter à bas prix sur Amazon. 2 pièces pour 1 680 yens, donc je pense que tout va bien.

Nouvelle planche à pain San Hayato SAD-101

L'ESP32-DevKitC a une largeur légèrement plus large entre les rangées de broches, et une maquette avec 5 trous de chaque côté, vendue à bas prix, n'aura pas de trous d'insertion. La série New Breadboard est facile à utiliser car elle comporte 6 trous de chaque côté. Cette fois, j'ai préparé le SAD-101 le plus simple. C'est une planche à pain légèrement haut de gamme, donc c'est 518 yens sur Amazon.

Installer MicroPython

Après cela, configurons MicroPython sur ESP32 selon Documents traduits en japonais.

Normalement, lorsque vous achetez ESP32-DevKitC, un micrologiciel compatible Arduino appelé Arduino Core est déjà écrit. En l'état, il ne peut être implémenté qu'en langage Arduino, alors réécrivez le firmware MicroPython.

Télécharger le firmware

Firmware for ESP32 boards

Dans MicroPython pour ESP32, vous devez sélectionner soit "Ferme qui peut utiliser le Wifi mais pas Bluetooth" ou "Ferme qui peut utiliser Bluetooth mais ne peut pas utiliser le Wifi". Cette fois, je choisirai une version stable de "une ferme qui peut utiliser le Wifi".

image.png

Installation du pilote

ESP32-Installez le pilote Silicon Labs pour une connexion USB à DevKitC.

Pilote VCP CP210x USB - UART Bridge

Cette fois, j'ai installé le pilote pour macOS. Si vous connectez l'ESP32 via USB, vous devriez probablement voir l'ESP32 dans / dev / cu.SLAB_USBtoUART.

Initialisation du firmware écrit

$ pip install esptool
$ esptool.py --port /dev/cu.SLAB_USBtoUART erase_flash

Si vous l'exécutez, vous obtiendrez le résultat suivant.

$ esptool.py --port /dev/cu.SLAB_USBtoUART erase_flash
esptool.py v2.8
Serial port /dev/cu.SLAB_USBtoUART
Connecting........_
Detecting chip type... ESP32
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: XX:XX:XX:XX:XX:XX
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 8.4s
Hard resetting via RTS pin...

Ecrire le firmware

$ esptool.py --chip esp32 --port /dev/cu.SLAB_USBtoUART write_flash -z 0x1000 esp32-idf3-20190529-v1.11.bin

Si vous l'exécutez, vous obtiendrez le résultat suivant.

$ esptool.py --chip esp32 --port /dev/cu.SLAB_USBtoUART write_flash -z 0x1000 esp32-idf3-20190529-v1.11.bin
esptool.py v2.8
Serial port /dev/cu.SLAB_USBtoUART
Connecting........____
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: XX:XX:XX:XX:XX:XX
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 1146864 bytes to 717504...
Wrote 1146864 bytes (717504 compressed) at 0x00001000 in 63.5 seconds (effective 144.4 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...

Vous avez maintenant configuré MicroPython. Je vais l'exécuter avec Python tout de suite.

Exécuter Python

Utilisation de MicroPython REPL

Tout d'abord, essayez d'accéder à l'invite REPL.

$ screen /dev/tty.SLAB_USBtoUART 115200

Si vous tapez help () [enter] et que la sortie est la suivante, cela réussit.

Welcome to MicroPython on the ESP32!

For generic online docs please visit http://docs.micropython.org/

For access to the hardware use the 'machine' module:

import machine
pin12 = machine.Pin(12, machine.Pin.OUT)
pin12.value(1)
pin13 = machine.Pin(13, machine.Pin.IN, machine.Pin.PULL_UP)
print(pin13.value())
i2c = machine.I2C(scl=machine.Pin(21), sda=machine.Pin(22))
i2c.scan()
i2c.writeto(addr, b'1234')
i2c.readfrom(addr, 4)

Basic WiFi configuration:

import network
sta_if = network.WLAN(network.STA_IF); sta_if.active(True)
sta_if.scan()                             # Scan for available access points
sta_if.connect("<AP_name>", "<password>") # Connect to an AP
sta_if.isconnected()                      # Check for successful connection

Control commands:
  CTRL-A        -- on a blank line, enter raw REPL mode
  CTRL-B        -- on a blank line, enter normal REPL mode
  CTRL-C        -- interrupt a running program
  CTRL-D        -- on a blank line, do a soft reset of the board
  CTRL-E        -- on a blank line, enter paste mode

For further help on a specific object, type help(obj)
For a list of available modules, type help('modules')
>>>

Il renvoie également print ().

>>> print("hello")
hello

La commande screen se termine par y car elle vous invite à confirmer la fin avec ctrl + a + k.

Transfert de code source

L'écriture de code en REPL est difficile, je vais donc permettre de transférer le fichier de code source. Tout d'abord, installez les outils.

$ pip install adafruit-ampy

Vérifiez les fichiers transférés.

$ ampy -p /dev/tty.SLAB_USBtoUART ls
/boot.py

Vous pouvez voir que seul boot.py est transféré.

Je vérifierai également le contenu.

$ $ ampy -p /dev/tty.SLAB_USBtoUART get /boot.py
# This file is executed on every boot (including wake-boot from deepsleep)
#import esp
#esp.osdebug(None)
#import webrepl
#webrepl.start()

Vous pouvez voir que toutes les lignes sont commentées et que ce qui est écrit dans boot.py n'est exécuté que la première fois lorsque la carte est réinitialisée. Après avoir exécuté boot.py, main.py sera exécuté en tant que processus principal (s'il existe). Transférez le code suivant en tant que main.py et essayez L-Chika.

import machine
import time

pin13 = machine.Pin(13, machine.Pin.OUT)

while True:
  pin13.on()
  time.sleep_ms(500)
  pin13.off()
  time.sleep_ms(500)

Utilisez la commande suivante pour transférer.

$ ampy -p /dev/tty.SLAB_USBtoUART put main.py

Si la LED connectée à la broche D13 s'allume à des intervalles de 500 ms, cela réussit.

Résumé

Quand j'ai découvert MicroPython pour la première fois, il me semblait que le seuil était élevé, comme la nécessité de réécrire le firmware, mais quand je l'ai essayé, bien qu'il y ait certains aspects de l'utilisation d'outils auxquels je n'étais pas habitué, ce n'était pas si difficile et j'ai réalisé le transfert et l'exécution du code Python. C'est fait. Si vous êtes familier avec Python, utiliser ESP32 avec MicroPython est une jolie option car une fois que vous avez effectué cette procédure, tout ce que vous avez à faire est de transférer le code source. Je ne l'ai pas fait cette fois, mais il semble que vous puissiez facilement vous connecter au point d'accès Wifi en utilisant la fonction de communication d'ESP32 comme suit, de sorte que vos rêves s'étendent.

import network
sta_if = network.WLAN(network.STA_IF); sta_if.active(True)
sta_if.scan()                             # Scan for available access points
sta_if.connect("<AP_name>", "<password>") # Connect to an AP
sta_if.isconnected()                      # Check for successful connection

Et si vous faites quelque chose d'intéressant, je pense que vous devriez certainement l'annoncer sur IoTLT.

Au fait, comme je l'ai écrit au début, si vous pouvez attendre jusqu'à ce qu'il arrive, vous pouvez jouer autant pour 436 yens. N'est-ce pas le moins que l'on puisse dire?


Demain, c'est [Introduction à Amazon Personalize avec le SDK Python] de @ TsuMakoto (https://qiita.com/TsuMakoto/items/a25412c8d2d09a7aa0dd).

Recommended Posts

Un guide pour faire de l'IoT avec MicroPython facilement jusqu'à la dernière minute
[Introduction à Udemy Python3 + Application] 47. Traitez le dictionnaire avec une instruction for
Une solution de contournement simple pour que les robots essaient de publier des tweets avec le même contenu
Enregistrer l'objet dans un fichier avec pickle
Calculez la solution optimale pour établir un record du monde pour dix types de compétition avec scipy.optimize
[Introduction à Python] Comment obtenir l'index des données avec l'instruction for
Comment créer un sous-menu avec le plug-in [Blender]
Transition vers l'écran de mise à jour avec le Django a tag
Une bibliothèque "apywrapper" qui développe facilement un wrapper pour l'API RESTful
Trouver une solution au problème N-Queen avec un algorithme génétique (2)
Probablement le moyen le plus simple de créer un pdf avec Python 3
Expérimentez pour créer un PDF indépendant pour Kindle avec Python
Créez un Twitter BOT avec le SDK GoogleAppEngine pour Python
Comment obtenir la dernière (dernière) valeur d'une liste en Python
Une histoire sur la façon de traiter le problème CORS
La façon habituelle d'ajouter un noyau avec Jupyter Notebook
Trouver une solution au problème N-Queen avec un algorithme génétique (1)
Je veux créer un Dockerfile pour le moment.
Essayez de générer une image de veste de type death metal avec DCGAN + grattez le site de base de données de métaux pour cela
[Apprentissage de Django avec la lame du diable] Comment obtenir un ensemble de requêtes pour une référence avant / arrière
J'ai essayé de déverrouiller l'entrée 2 lock sésame d'une simple pression sur le bouton AWS IoT
[Phrase courte] easygui pour ceux qui veulent utiliser une interface graphique simple avec Python très facilement
Créez facilement un profil avec un décorateur
J'ai créé une bibliothèque qui lit facilement les fichiers de configuration avec Python
Créez un alias pour Route53 vers CloudFront avec l'API AWS
Créez un sélecteur de couleurs pour la roue chromatique avec Python + Qt (PySide)
[Introduction à StyleGAN] J'ai joué avec "The Life of a Man" ♬
Comment faire une commande pour lire le fichier de paramètres avec pyramide
Changez le package à installer pour chaque environnement avec de la poésie
L'histoire de la création d'un pilote standard pour db avec python.
Comment créer une étiquette (masque) pour la segmentation avec labelme (masque de segmentation sémantique)
[Introduction à Python] Comment utiliser l'opérateur in dans l'instruction for?
Changez l'invite de bash en une couleur simple pour une visualisation facile
Série de réflexion sur le "développement frontal IoT" ④ Prototypage IoT avec MicroPython Partie 1
J'ai essayé d'enregistrer une station sur la plateforme IoT "Rimotte"
Je voulais résoudre le problème ABC164 A ~ D avec Python
Theano Une astuce pour les amateurs pour faire de leur mieux avec PyMC3
Écrivez un script pour calculer la distance avec le système Elasticsearch 5 sans douleur
Une commande pour vérifier facilement la vitesse du réseau sur la console
Pour le moment, je veux convertir n'importe quel fichier avec ffmpeg !!
J'ai essayé de faire une étrange citation pour Jojo avec LSTM
Comment envoyer une requête à l'API DMM (FANZA) avec python
Créer une API REST pour faire fonctionner dynamodb avec le Framework Django REST