Skip to content

Instantly share code, notes, and snippets.

@mguijarr
Last active November 24, 2017 00:02
Show Gist options
  • Save mguijarr/7af01ee096d6ecc3acd7da054b17ac60 to your computer and use it in GitHub Desktop.
Save mguijarr/7af01ee096d6ecc3acd7da054b17ac60 to your computer and use it in GitHub Desktop.
Redis+IoT meetup, board ESP8266 micropython

ESP8266 + capteur de luminosité + micropython + communication avec Redis

inspiré par le meetup organisé par F. Cerbelle

Installation de micropython

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.

esptool.py

pip install esptool

Vider la flash

esptool.py --port /dev/ttyUSB0 erase_flash

Télécharger l'image de micropython

Lien ici

Flasher l'image sur l'ESP8266

esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash --flash_size=detect -fm dio 0 ./esp8266-20171101-v1.9.3.bin

Vérification de l'installation de micropython

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)

Capteur de luminosité

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

Connexion à Internet

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')
>>> 

Récupérer son adresse MAC

>>> import network
>>> import ubinascii
>>> mac=ubinascii.hexlify(network.WLAN().config("mac"),":").decode()
>>> mac
'60:01:94:38:f4:05'
>>> 

Connexion à une base Redis

>>> import socket
>>> redis_db_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> redis_db_socket.connect(('192.168.0.11', 6379))
>>> 

Envoi d'une mesure du capteur

>>> 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'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment