inspiré par le meetup organisé par F. Cerbelle
L'installation de micropython sur l'ESP8266 nécessite d'avoir une installation de Python fonctionnelle sur le PC utilisé pour connecter la carte par le câble USB.
pip install esptool
esptool.py --port /dev/ttyUSB0 erase_flash
Lien ici
esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash --flash_size=detect -fm dio 0 ./esp8266-20171101-v1.9.3.bin
Utilisation de l'outil picocom
pour se connecter sur la carte et avoir le prompt Python:
picocom /dev/ttyUSB0 -b 115200
Sortie attendue:
picocom v1.7
port is : /dev/ttyUSB0
flowcontrol : none
baudrate is : 115200
parity is : none
databits are : 8
escape is : C-a
local echo is : no
noinit is : no
noreset is : no
nolock is : no
send_cmd is : sz -vv
receive_cmd is : rz -vv
imap is :
omap is :
emap is : crcrlf,delbs,
Terminal ready
Presser la touche [Return] plusieurs fois : le prompt Python >>>
apparaît. On peut vérifier la checksum du firmware:
>>> import esp
>>> esp.check_fw()
size: 600872
md5: 35e285a80516e70242ebf7d780d6c70f
True
>>>
(pour sortir de picocom: Ctrl-A + Ctrl-Q)
On peut déjà vérifier le fonctionnement du capteur de luminosité:
>>> import machine
>>> capteur = machine.ADC(0)
>>> capteur.read()
489
Les valeurs renvoyées vont de 0 (noir complet) à 1024 (pleine lumière).
Pour se connecter à Internet depuis l'ESP8266, il faut disposer d'un réseau Wifi ouvert sur Internet. Cette connexion va permettre d'envoyer les informations du capteur de luminosité vers la base de données Redis. Le plus simple consiste à créer une fonction de connexion dans le fichier lu au démarrage de micropython sur l'ESP8266.
Pour éditer les fichiers sur l'ESP8266, l'outil rshell
est utilisé avec les paramètres suivants:
rshell -p /dev/ttyUSB0 --editor vi --buffer-size=30
(NB: changer le paramètre editor
pour nano par exemple, pour les allergiques à vi !)
matias@brian ~/dev/esp8266 $ rshell -p /dev/ttyUSB0 --editor vi --buffer-size=30
Connecting to /dev/ttyUSB0 ...
Welcome to rshell. Use Control-D to exit.
/home/matias/dev/esp8266> boards
pyboard @ /dev/ttyUSB0 connected Dirs: /boot.py /pyboard/boot.py
/home/matias/dev/esp8266> edit /pyboard/boot.py
Ajouter à la suite dans le fichier:
def do_connect():
import network
sta_if = network.WLAN(network.STA_IF)
if not sta_if.isconnected():
print('connecting to network...')
sta_if.active(True)
sta_if.connect('nom du reseau Wifi', 'mot de passe')
while not sta_if.isconnected():
pass
print('network config:', sta_if.ifconfig())
Enregistrer, et c'est parti ! Quitter rshell
et rebooter le contrôleur, depuis picocom̀̀
:
import machine
machine.reset()
On peut dès lors tester la connexion au Wifi:
MicroPython v1.9.3-8-g63826ac5c on 2017-11-01; ESP module with ESP8266
Type "help()" for more information.
>>> do_connect()
network config: ('192.168.43.68', '255.255.255.0', '192.168.43.1', '192.168.43.1')
>>>
>>> import network
>>> import ubinascii
>>> mac=ubinascii.hexlify(network.WLAN().config("mac"),":").decode()
>>> mac
'60:01:94:38:f4:05'
>>>
>>> import socket
>>> redis_db_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> redis_db_socket.connect(('192.168.0.11', 6379))
>>>
>>> valeur = capteur.read()
>>> redis_db_socket.sendall("*3\r\n$5\r\nLPUSH\r\n$19\r\nv:%s\r\n$%d\r\n%d\r\n" % (mac, len(valeur), valeur))
>>> redis_db_socket.recv(1024)
':1\r\n'