Projet MicropyThon pour libérer le socket intelligent WiFi Sonoff du cloud en exécutant un serveur Web sur l'appareil.
Appareils testés:
L'appareil le fera à chaque démarrage:
Quelques notes sur la fonctionnalité de la minuterie:
L'appareil essaie toujours d'activer / désactiver la mise sous tension en fonction de la minuterie actuelle. Même après une panne de courant. Cependant, cela ne fonctionne correctement que si l'heure actuelle est définie correctement par le RTC. L'heure actuelle est automatiquement récupérée sur Internet via la synchronisation NTP. Au démarrage et également répété après le début. Bien sûr, cela ne peut fonctionner que si l'appareil est connecté à Internet via le wifi;)
Vous pouvez "écraser" le temporisateur actuel à tout moment en appuyant sur le bouton de l'appareil. Ce remplacement restera jusqu'au prochain temporisateur. Après une défaillance de puissance, les informations "d'écrasement" sont supprimées et la minuterie régule à nouveau la puissance.
Des choses qui seront implémentées dans la quasi-fonctionnalité:
plus loin:
La page Web ressemble à ceci:
Toutes les captures d'écran existantes peuvent être trouvées ici:
3.3V , GND , TX et RXTrès bonnes informations pour commencer pouvez-vous trouver ici:
config.h et compilez yaota8266 et firmware_config_wifi.json Clone les sources et configurer VirtualEnv via pipenv :
~ $ git clone https://github.com/jedie/micropython-sonoff-webswitch.git
~ $ cd micropython-sonoff-webswitch
~ /micropython-sonoff-webswitch$ make updatePour voir toutes les cibles, il suffit d'appeler la marque, par exemple:
~ /micropython-sonoff-webswitch$ make
make targets:
help This help page
docker-pull pull docker images
docker-build pull and build docker images
update update git repositories/submodules, virtualenv, docker images and build local docker image
thonny run Thonny IDE to access the Micropython REPL (Python prompt)
test Run pytest
micropython_shell start a bash shell in docker container " local/micropython:latest "
unix-port-shell start micropython unix port interpreter
build-firmware-combined compiles the micropython non-OTA firmware and store it here: /build/firmware-combined.bin
build-ota-firmware compiles the micropython OTA firmware and store it here: /build/firmware-ota.bin
yaota8266-rsa-keys Pull/build yaota8266 docker images and Generate RSA keys and/or print RSA modulus line for copy & paste into config.h
yaota8266-build Compile ota bootloader and store it here: build/yaota8266.bin
verify Check RSA key, config.h and compiled " yaota8266.bin "
erase-flash call esptool.py erase_flash
flash-firmware-combined Flash build/firmware-combined to location 0x3c000 via esptool.py
flash-yaota8266 Flash build/yaota8266.bin to location 0x0 via esptool.py
flash-ota-firmware Flash build/firmware-ota.bin to location 0x3c000 via esptool.py
hard-ota Start yaota8266 live-ota to hard-OTA Update the firmware file build/firmware-ota.bin.ota
soft-ota Start soft-OTA updates: Compile .py to .mpy and push missing/updated files ( * .mpy, * .css, * .html etc.) to the device
miniterm Low level debug device via miniterm.py (from pyserial) to /dev/ttyUSB0 Vous devez créer docker-yaota8266/yaota8266/config.h et insérer votre ligne de module RSA.
Pour générer vos touches RSA et afficher la ligne nécessaire pour config.h Appelez simplement:
~ /micropython-sonoff-webswitch$ make yaota8266-rsa-keys
...
Copy & paste this RSA modulus line into your config.h:
----------------------------------------------------------------------------------------------------
# define MODULUS "xcex4axafx65x0dx4ax74xdaxc1x30x59x80xcfxddxe8x2ax2ex1dxf7xa8xc9x6cxa9x4ax2cxb7x8ax5ax2ax25xc0x2bx7bx2fx58x4cxa8xcbx82x07x06x08x7exffx1fxcex47x13x67x94x5fx9axacx5ex7dxcfx63xf0x08xe9x51x98x95x01"
----------------------------------------------------------------------------------------------------Les fichiers clés RSA générés sont ici:
docker-yaota8266/yaota8266/ota-client/priv.keydocker-yaota8266/yaota8266/ota-client/pub.keyVous devez sauvegarder ces fichiers;
Après avoir créé vos propres clés RSA et config.h , vous pouvez compiler yaota8266.bin et firmware-ota.bin , par exemple:
~ /micropython-sonoff-webswitch$ make yaota8266-build
~ /micropython-sonoff-webswitch$ make build-ota-firmwareLes fichiers compilés sont stockés ici:
~/micropython-sonoff-webswitch/build/yaota8266.bin~/micropython-sonoff-webswitch/build/firmware-ota.bin <- pour le clignotement~/micropython-sonoff-webswitch/build/firmware-ota.bin.ota <- utilisé dans le processus dur-OTAESP8266 doit être mis en mode de programmation avant que le micrologiciel puisse être téléchargé. Pour mettre l'ESP8266 en mode de programmation:
Vous devez peut-être donner à l'utilisateur les autorisations pour accéder au port USB, par exemple: sudo usermod -a -G dialout $USER sinon vous obtiendrez un message d'erreur comme: Permission denied: '/dev/ttyUSB0'
Maintenant, esptool peut être utilisé. Mais seulement pour une seule opération! Après chaque appel Esptool, vous devez déconnecter l'appareil de l'USB et répéter cette procédure!
La première fois, la mémoire flash doit être effacée, appelez:
~ /micropython-sonoff-webswitch$ make erase-flash Après erase-flash et après avoir appelé make yaota8266-build et make build-ota-firmware vous pouvez flasher votre appareil:
# put into Programming Mode and call:
~ /micropython-sonoff-webswitch$ make flash-yaota8266
# Again, put into Programming Mode and call:
~ /micropython-sonoff-webswitch$ make flash-ota-firmwareImportand : Ces commandes Flash sont pour le périphérique Sonoff et peuvent ne pas fonctionner sur d'autres appareils ESP8266!
Pour d'autres appareils, utilisez simplement esptool directement, par exemple:
~ /micropython-sonoff-webswitch$ pipenv run esptool.py --port /dev/ttyUSB0 write_flash 0 build/yaota8266.bin
~ /micropython-sonoff-webswitch$ pipenv run esptool.py --port /dev/ttyUSB0 write_flash 0x3c000 build/firmware-ota.binNote:
Le fichier firmware-ota.bin doit être flash avec esptool.py pas le firmware-ota.bin.ota ! Ce fichier est UES dans le processus de mise à jour Hard-OTA.
Plus d'informations sur le clignotement peuvent être trouvées dans la documentation officielle ici: http://docs.micropython.org/en/latest/esp8266/tutorial/intro.html
Une fois que vous avez le firmware sur l'appareil, vous pouvez accéder au Micropython REP (Python Invite). Il existe différentes façons de le faire. J'ai utilisé Thonny et son support Micropython
thonny est installé via PIPENV, pour démarrer l'IDE, il suffit d'appeler:
~ /micropython-sonoff-webswitch$ make thonnyPremiers pas de Thonny:
Tools / Options / Interpreter Sélectionner: MicroPython (ESP8266)files : View / Files Vous devriez maintenant pouvoir accéder au Micropython REPL via Ctrl-F2 . Vous pouvez également démarrer des scripts sur l'appareil:
This computer , accédez à: .../micropython-sonoff-webswitch/helpersmpy_information.py dans l'éditeurF5 Après le format, le système de fichiers Flash en tant que littlefs2 : Copiez les fichiers manquants sur l'appareil, à l'aide de Soft-OTA:
L'appareil a besoin de SSID / mot de passe pour pouvoir se connecter à différents WLAN. Il lit les informations d'identification du fichier _config_wifi.json . Ce fichier doit être créé. Le modèle est _config_wifi-example.json.
Copier et modifier _config_wifi-example.json à src/_config_wifi.json
Tous les fichiers manquants dans src seront copiés sur l'appareil via Soft-OTA.
Pour connecter l'appareil sur le point de vue Fist à votre réseau WiFi, modifiez et exécutez ceci:
import time , network
sta_if = network . WLAN ( network . STA_IF )
sta_if . active ( True )
sta_if . connect ( 'your-ssid' , 'Your-WiFi-Password' )
while not sta_if . isconnected ():
time . sleep ( 0.5 )
print ( 'connected:' , sta_if . ifconfig ()) Copiez et collez cet extrait de code dans Thonny IDE, insérez vos informations d'identification et exécutez-la via F5
Une fois l'appareil connecté à votre wifi, il peut exécuter Soft-OTA et copier tous les fichiers src manquants.
Démarrez le serveur Soft-OTA avec:
~ /micropython-sonoff-webswitch$ make soft-ota En même temps, ouvrez ... / micropopython-sonoff-webswitch / src / ota_client.py dans thonny et démarrez-le via F5 .
Maintenant, l'OTA doux devrait être exécuté:
src seront transférés sur l'appareilMaintenant, la configuration de l'appareil est effectuée;)
Remarque : il existe deux types de mises à jour OTA:
L'OTA «dur» via yaota8266 est en cours, voir: # 33
Après la configuration initiale et lorsque tout fonctionne et que l'appareil est connecté à votre WLAN, vous pouvez utiliser les mises à jour OTA.
L'appareil exécutera le /src/ota_client.py sur chaque démarrage.
Le script attend un certain temps pour le serveur OTA et après le délai d'expiration, le serveur Web normal sera démarré.
Pour démarrer le soft-OTA Server , faites-le:
~ /micropython-sonoff-webswitch$ make soft-otaSi le serveur s'exécute: redémarrez le périphérique et consultez la sortie du serveur OTA.
L'implémentation de mise à jour OTA fait:
mpy_cross installée (si ce n'est pas la correspondance: refuser la mise à jour).py existant sur l'appareil si le fichier .mpy a été envoyé./bdist/ - Fichiers .mpy compilés (et .html , fichiers .css ) qui seront téléchargés sur l'appareil dans soft-OTA./build/ - Fichiers de firmware compilés ( firmware-*.bin et yaota8266.bin ) pour le clignotement et hard-OTA./docker-yaota8266/ - Submodule Git https://github.com/jedie/docker-yaota8266 pour compiler yaota8266.bin via Docker./helpers/ - Quelques tests de périphérique / scripts d'assistance pour bootstrap et développement./micropython_config/ - Fichiers de configuration utilisés pour compiler le firmware Micropython./mpy_tests/ - Des tests qui peuvent être exécutés sur un appareil MicropyThon (seront également exécutés par PyTest avec Mocks)./sdist/ - Contient tous les modules qui seront congelés dans le firmware, créés via utils/make_sdist.py./soft_ota/ - Code source du serveur OTA./src/ - fichiers source de périphérique./tests/ - quelques fichiers pytest (exécutez sur l'hôte avec cpython)./utils/ - Utils for local run (compiler, code peluche, synchroniser avec mpycntrl) yaota8266.bin via docker: https://github.com/jedie/docker-yaota8266