Ein Leitfaden für IoT mit MicroPython bis zur letzten Minute

Dieser Artikel ist der zweite Tag von Python Part 2 Adventskalender 2019. Der erste Tag war @ ssh-22s erweiterter String-Ersatz mit re.sub.


Mit der Geburt von Arduino und Raspberry Pi wird das Ökosystem im IoT-Bereich schnell aufgebaut. Obwohl Raspberry Pi in Python implementiert werden kann, ist Arduino für eine kleine elektronische Steuerung überwiegend einfacher zu verwenden. Einige Benutzer möchten jedoch möglicherweise in der bekannten Python-Sprache anstelle der Arduino-Sprache (wie C / C ++) schreiben. In diesem Artikel möchte ich einen Leitfaden schreiben, mit dem Sie die Entwicklung mit MicroPython, einem eingebetteten Python, auch in finanzieller Hinsicht problemlos starten können.

Was vorzubereiten?

--Arduino …… nicht ESP32-Entwicklungsboard

Die Arbeitsumgebung ist macOS + Python3.

ESP32-Entwicklungsboard

In der jüngsten Arduino-Region kann dieselbe Entwicklungsumgebung wie Arduino verwendet werden, und ESP32, das Wifi / Bluetooth verwenden kann, ist zum Mainstream geworden (es ist nicht genau Arduino, aber es kann fast auf die gleiche Weise verwendet werden). ESP32-DevKit C und kompatible Produkte, die im Allgemeinen anspruchsvoller als das Standard-Arduion UNO sind, aber billiger, werden häufig verwendet.

Wenn Sie es eilig haben, erhalten Sie Akizuki Denshi ESP32-DevKitC für 1.480 Yen oder Switch Science [ESPr Developer 32](https: //www.switch) für 2.200 Yen -science.com/catalog/3210/) Beschaffen wir uns.

Wenn Sie es für ungefähr 1.500 Yen kaufen können, können Sie es in Japan kaufen, aber wenn Sie sich nicht beeilen, wird es 1/3 des Preises sein, weil elektronische Arbeit Teile bricht und es mühsam ist, es wiederzuverwenden, wenn Sie es verwenden, um etwas herzustellen. Es wird empfohlen, drei bei zu kaufen. Für diejenigen, die nicht mit Kreditkarte per Versandhandel in Übersee bezahlen möchten, gibt es andere Websites wie Banggood, auf denen Paypal verwendet werden kann. Da der Preisunterschied beim Inlandskauf jedoch gering ist, ist es möglicherweise besser, ihn in Japan zu kaufen. Trotzdem ist es weniger als die Hälfte des Preises des Raspberry Pi. (Ergänzung) Wenn Sie darüber nachdenken, können Sie es günstig bei Amazon kaufen. 2 Stück für 1.680 Yen, also denke ich, dass das in Ordnung ist. Sanhayatos neues Steckbrett SAD-101ESP32-DevKitC hat einen etwas größeren Abstand zwischen den Stiftreihen, und ein billig verkauftes Steckbrett mit 5 Löchern auf jeder Seite hat keine Einstecklöcher. Die New Breadboard-Serie ist einfach zu bedienen, da sie auf jeder Seite 6 Löcher hat. Dieses Mal habe ich den einfachsten SAD-101 vorbereitet. Es ist ein kleines hochwertiges Steckbrett, also 518 Yen bei Amazon.

MicroPython installieren

Danach richten wir MicroPython auf ESP32 gemäß [ins Japanische übersetzte Dokumente] ein (https://micropython-docs-ja.readthedocs.io/ja/latest/esp32/tutorial/intro.html).

Normalerweise wird beim Kauf von ESP32-DevKitC bereits eine Arduino-kompatible Firmware namens Arduino Core geschrieben. Da es so ist, kann es nur in der Arduino-Sprache implementiert werden. Schreiben Sie daher die MicroPython-Firmware neu.

Firmware herunterladen

Firmware for ESP32 boards

In MicroPython für ESP32 müssen Sie entweder "Farm, die Wifi, aber nicht Bluetooth verwenden kann" oder "Farm, die Bluetooth verwenden kann, aber Wifi nicht verwenden kann" auswählen. Dieses Mal werde ich einen stabilen Build von "einer Farm, die Wifi nutzen kann" wählen.

image.png

Treiberinstallation

ESP32-Installieren Sie den Silicon Labs-Treiber für eine USB-Verbindung zu DevKitC.

CP210x USB --UART Bridge VCP-Treiber

Diesmal habe ich den Treiber für macOS installiert. Wenn Sie den ESP32 über USB anschließen, sollte der ESP32 wahrscheinlich in / dev / cu.SLAB_USBtoUART angezeigt werden.

Initialisierung der schriftlichen Firmware

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

Wenn Sie es ausführen, erhalten Sie das folgende Ergebnis.

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

Firmware schreiben

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

Wenn Sie es ausführen, erhalten Sie das folgende Ergebnis.

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

Sie haben jetzt MicroPython eingerichtet. Ich werde es sofort mit Python ausführen.

Python ausführen

Verwenden von MicroPython REPL

Versuchen Sie zunächst, auf die REPL-Eingabeaufforderung zuzugreifen.

$ screen /dev/tty.SLAB_USBtoUART 115200

Wenn Sie help () [enter] eingeben und die Ausgabe wie folgt lautet, ist sie erfolgreich.

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

Es gibt auch "print ()" zurück.

>>> print("hello")
hello

Der Befehl "screen" endet mit "y", da Sie aufgefordert werden, das Ende mit "Strg + a" + "k" zu bestätigen.

Quellcodeübertragung

Das Schreiben von Code in REPL ist schwierig, daher werde ich die Übertragung der Quellcodedatei ermöglichen. Installieren Sie zuerst die Werkzeuge.

$ pip install adafruit-ampy

Überprüfen Sie die übertragenen Dateien.

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

Sie können sehen, dass nur boot.py übertragen wird.

Ich werde auch den Inhalt überprüfen.

$ $ 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()

Sie können sehen, dass alle Zeilen auskommentiert sind und dass das, was in boot.py geschrieben ist, nur beim ersten Zurücksetzen der Karte ausgeführt wird. Nach dem Ausführen von boot.py wird main.py als Hauptprozess ausgeführt (falls vorhanden). Übertragen Sie den folgenden Code als main.py und versuchen Sie es mit 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)

Verwenden Sie zum Übertragen den folgenden Befehl.

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

Wenn die an den D13-Pin angeschlossene LED in Abständen von 500 ms aufleuchtet, ist dies erfolgreich.

Zusammenfassung

Als ich zum ersten Mal von MicroPython erfuhr, schien der Schwellenwert hoch zu sein, beispielsweise die Notwendigkeit, die Firmware neu zu schreiben. Als ich es jedoch tatsächlich ausprobierte, war es nicht so schwierig, obwohl es einige Aspekte der Verwendung von Tools gab, an die ich nicht gewöhnt war, und ich erkannte die Übertragung und Ausführung von Python-Code. Es ist fertig. Wenn Sie mit Python vertraut sind, ist die Verwendung von ESP32 mit MicroPython eine sehr wichtige Option, da Sie den Quellcode erst übertragen müssen, nachdem Sie dieses Verfahren ausgeführt haben. Diesmal habe ich dies noch nicht getan, aber es scheint, dass Sie mithilfe der Kommunikationsfunktion von ESP32 wie folgt problemlos eine Verbindung zum Wifi-AP herstellen können, sodass sich Ihre Träume erweitern werden.

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

Und wenn Sie etwas Interessantes machen, sollten Sie es auf jeden Fall unter IoTLT bekannt geben.

Übrigens, wie ich am Anfang schrieb, wenn Sie warten können, bis es eintrifft, können Sie so viel für 436 Yen spielen. Ist es nicht das Beste, um es gelinde auszudrücken?


Morgen ist @ TsuMakotos Einführung in Amazon Personalize with Python SDK.

Recommended Posts

Ein Leitfaden für IoT mit MicroPython bis zur letzten Minute
[Einführung in die Udemy Python3 + -Anwendung] 47. Verarbeiten Sie das Wörterbuch mit einer for-Anweisung
Eine einfache Problemumgehung für Bots, um zu versuchen, Tweets mit demselben Inhalt zu veröffentlichen
Speichern Sie das Objekt in einer Datei mit pickle
Berechnen Sie mit scipy.optimize die optimale Lösung, um einen Weltrekord für zehn Arten von Wettbewerb aufzustellen
[Einführung in Python] So erhalten Sie den Datenindex mit der for-Anweisung
So erstellen Sie ein Untermenü mit dem Plug-In [Blender]
Übergang zum Update-Bildschirm mit dem Django-Tag
Eine Bibliothek "Apywrapper", die auf einfache Weise einen Wrapper für die RESTful-API entwickelt
Suche nach einer Lösung für das N-Queen-Problem mit einem genetischen Algorithmus (2)
Wahrscheinlich der einfachste Weg, um mit Python 3 ein PDF zu erstellen
Experimentieren Sie mit Python, um ein PDF für Selbstversorger für Kindle zu erstellen
Erstellen Sie einen Twitter-BOT mit dem GoogleAppEngine SDK für Python
So erhalten Sie den letzten (letzten) Wert in einer Liste in Python
Eine Geschichte über den Umgang mit dem CORS-Problem
Die übliche Art, einen Kernel mit Jupyter Notebook hinzuzufügen
Suche nach einer Lösung für das N-Queen-Problem mit einem genetischen Algorithmus (1)
Ich möchte vorerst eine Docker-Datei erstellen.
Versuchen Sie, mit DCGAN + ein Death Metal-ähnliches Jackenbild zu erzeugen, und kratzen Sie die Metalldatenbank-Site dafür ab
[Django lernt mit der Klinge des Teufels] So erhalten Sie einen Abfragesatz für die Vorwärts- / Rückwärtsreferenz
Ich habe versucht, den Sesam für Eingang 2 mit einem einzigen Druck auf die AWS IoT-Taste zu entsperren
[Kurzer Satz] easygui für diejenigen, die sehr einfach eine einfache GUI mit Python verwenden möchten
Einfach cProfile mit einem Dekorateur
Ich habe eine Bibliothek erstellt, die Konfigurationsdateien mit Python einfach lesen kann
Erstellen Sie mit der AWS-API einen Alias für Route53 zu CloudFront
Erstellen Sie mit Python + Qt (PySide) einen Farbwähler für das Farbrad.
[Einführung in StyleGAN] Ich habe mit "The Life of a Man" ♬ gespielt
So erstellen Sie einen Befehl zum Lesen der Einstellungsdatei mit Pyramide
Wechseln Sie das zu installierende Paket für jede Umgebung mit Gedichten
Die Geschichte, einen Standardtreiber für db mit Python zu erstellen.
So erstellen Sie eine Bezeichnung (Maske) für die Segmentierung mit labelme (semantische Segmentierungsmaske)
[Einführung in Python] Wie verwende ich den Operator in in der for-Anweisung?
Ändern Sie die Bash-Eingabeaufforderung zur einfachen Anzeige in eine einfache Farbe
Reihe zum Nachdenken über "IoT-Front-End-Entwicklung" ④ IoT-Prototyping mit MicroPython Teil 1
Ich habe versucht, einen Sender auf der IoT-Plattform "Rimotte" zu registrieren.
Ich wollte das ABC164 A ~ D-Problem mit Python lösen
Theano Ein Trick für Amateure, um mit PyMC3 ihr Bestes zu geben
Schreiben Sie ein Skript, um die Entfernung mit dem Elasticsearch 5-System schmerzfrei zu berechnen
Ein Befehl zum einfachen Überprüfen der Netzwerkgeschwindigkeit auf der Konsole
Vorerst möchte ich jede Datei mit ffmpeg konvertieren !!
Ich habe versucht, Jojo mit LSTM ein seltsames Zitat zu machen
So senden Sie eine Anfrage mit Python an die DMM (FANZA) -API
Erstellen Sie eine REST-API, um dynamodb mit dem Django REST Framework zu betreiben