Einfaches und einfaches IoT-Leben mit Micropython!

Dieser Beitrag ist

Python-Adventskalender 2019 Dies ist der dritte Tag der Veröffentlichung.

Micropython ist gut

Himbeer-Pi beiseite Die sogenannte ESP32-Serie kann Wifi verwenden, aber wie Arduino ist es ein Ersatz, der das Programm auf ROM brennt und ausführt. Im Grunde handelt es sich um ein C-ähnliches Programm, das die IDE von Arduino verwendet. Ich schreibe.

···Aber

HTTP-Anfrage ist faul www Auch wenn es sich nur um IoT handelt, indem Kantenpunktdaten mit SaaS verknüpft werden Ehrlich gesagt, wenn die HTTP-Anfrage träge ist, werden Sie nicht motiviert sein.

Schreiben Sie so mit Arduino

Beispielskizze des Arduino Http Client

HTTPPost


#include <ArduinoHttpClient.h>
#include <WiFi101.h>

#include "arduino_secrets.h"

///////please enter your sensitive data in the Secret tab/arduino_secrets.h
/////// Wifi Settings ///////
char ssid[] = SECRET_SSID;
char pass[] = SECRET_PASS;


char serverAddress[] = "192.168.0.3";  // server address
int port = 8080;

WiFiClient wifi;
HttpClient client = HttpClient(wifi, serverAddress, port);
int status = WL_IDLE_STATUS;

void setup() {
  Serial.begin(9600);
  while ( status != WL_CONNECTED) {
    Serial.print("Attempting to connect to Network named: ");
    Serial.println(ssid);                   // print the network name (SSID);

    // Connect to WPA/WPA2 network:
    status = WiFi.begin(ssid, pass);
  }

  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);
}

void loop() {
  Serial.println("making POST request");
  String postData = "name=Alice&age=12";

  client.beginRequest();
  client.post("/");
  client.sendHeader("Content-Type", "application/x-www-form-urlencoded");
  client.sendHeader("Content-Length", postData.length());
  client.sendHeader("X-Custom-Header", "custom-header-value");
  client.beginBody();
  client.print(postData);
  client.endRequest();

  // read the status code and body of the response
  int statusCode = client.responseStatusCode();
  String response = client.responseBody();

  Serial.print("Status code: ");
  Serial.println(statusCode);
  Serial.print("Response: ");
  Serial.println(response);

  Serial.println("Wait five seconds");
  delay(5000);
}

Obwohl ich nur POST, ist es schlampig www Nun, ich hoffe ich gewöhne mich daran, aber es ist wirklich schlimm ...

So verwenden Sie MicroPython ...

Vorerst brauchen wir eine Grundlage.

Stiftung

Ich finde diesen Bereich gut.

https://www.switch-science.com/catalog/5448/ https://www.switch-science.com/catalog/3210/

Es ist in Ordnung, die billige ESP32-Serie zu verwenden, die bei Amazon verkauft wird. Ehrlich gesagt gibt es ein Problem der Geschicklichkeit, und selbst wenn es markiert ist, gibt es auch ein Problem, ob es wirklich echt ist. Kaufen Sie diesen Bereich also an einem soliden Ort.

Informationen zur Installationsmethode finden Sie in diesem Handbuch.

Erste Schritte mit MicroPython mit ESP32

Wie schreibt man

MicroPython ist so konzipiert, dass beim Einschalten zuerst boot.py und dann main.py ausgeführt wird.

boot.py

Es ist die erste Python-Datei, die beim Einschalten aufgerufen wird. Grundsätzlich ist es eine gute Idee, einen Prozess zu integrieren, der eine Verbindung zu Wifi herstellt.

boot.py



import utime
import network
# ==== connecti to wifi access point ============================================
SSID_NAME = <SSID>
SSID_PASS = <WifiPassword>

def connect_wifi(ssid, passkey, timeout=10):
    wifi= network.WLAN(network.STA_IF)
    if wifi.isconnected() :
        print('already Connected.    connect skip')
        return wifi
    else :
        wifi.active(True)
        wifi.connect(ssid, passkey)
        while not wifi.isconnected() and timeout > 0:
            print('.')
            utime.sleep(1)
            timeout -= 1
    
    if wifi.isconnected():
        print('Connected')
        return wifi
    else:
        print('Connection failed!')
        return null

wifi = connect_wifi(SSID_NAME, SSID_PASS)
if not wifi :
    sys.exit(0)

main.py

Es handelt sich um eine Python-Datei, die ausgeführt wird, wenn die Ausführung von boot.py normal endet. Wenn Sie Arduino usw. gemacht haben, können Sie verstehen Grundsätzlich geht diese Python-Datei von einer Endlosschleife aus.

main.py



from m5stack import lcd # m5stack Library
import machine
import time

lcd.setCursor(0, 0)
lcd.setColor(lcd.WHITE)
lcd.font(lcd.FONT_DejaVu24)
rtctime = machine.RTC()

def aaaaaa():
    global rtctime
    prm_year = '{:0=4}'.format(timedata[0])
    prm_month = '{:0=2}'.format(timedata[1])
    prm_day = '{:0=2}'.format(timedata[2])
    prm_hour = '{:0=2}'.format(timedata[3])
    prm_minute = '{:0=2}'.format(timedata[4])
    prm_second = '{:0=2}'.format(timedata[5])
    
    prm_datetime =  prm_year + "-" \
                +   prm_month + "-" \
                +   prm_day + "T" \
                +   prm_hour + ":" \
                +   prm_minute + ":" \
                +   prm_second + "Z"


    lcd.print(prm_datetime,10,10)

while True: #Endlosschleife
    aaaaaa()
    time.sleep(1)

wichtiger Punkt

Es hat nicht so viel Speicher- und Ausführungsspeicherbereich (Heap-Bereich) wie ein Personal Computer oder Raspberry Pi. Wie Sie diesem Artikel entnehmen können, sind es einige.

[mgo-tec elektronische Arbeit: ESP32-WROOM-32 Chipspeicher MAC-Adressinformationserfassungsmethode](https://www.mgo-tec.com/blog-entry-chip-info-esp-wroom-32-esp32 .html)

Bitte beachten Sie, dass der Heap-Bereich im Handumdrehen aufgebraucht wird, wenn Sie ihn lose codieren, GC häufig auftritt oder die Python-Datei, die Sie ursprünglich erstellt haben, nicht enthalten ist.

Wie stellen Sie eine http-Anfrage?

Ich denke, Python verwendet die Anforderungsbibliothek. Verwenden Sie für MicroPython die Bibliothek urequests. Die Funktionalität entspricht fast der Anforderungsbibliothek.

urequests



import ujson
import urequests

    def postpowerbi(self):
        pbheaders = {
            'Content-Type' :'application/json'
        }
        body = [
                {
                    "datetime" : self.datetime,
                    "temp" : float(self.temp),
                    "humi" : float(self.humi),
                    "pres" : float(self.pres)
                }
            ]
        body_json = ujson.dumps(body).encode("utf-8")
        res = urequests.post(
            self.posturl,
            data=body_json,
            headers=pbheaders
        )
        res.close()

Was ist mit anderen Bibliotheken? ??

Grundsätzlich wünschte ich, Sie könnten das sehen ...

github MicroPython Lib

Was ist mit IoT-Gerätebibliotheken?

Adafruit, der viele Temperatursensoren herstellt, hat auch eine Bibliothek für Python.

github Adafruit

Auf diese Weise können IoT-Geräte einfach gesteuert werden.

Adafruit ist teuer, aber ist die chinesische, die bei Amazon verkauft wird, nicht schlecht?

Obwohl dies nicht empfohlen wird, gibt es einige, die verwendet werden können, wenn die Basen wie die verwendeten Sensoren identisch sind. Es gibt jedoch Fallen, also auf eigenes Risiko. Möglicherweise müssen Sie einen Teil der Bibliothek ändern. Bitte hören Sie auf, es für Ihre eigenen Produkte zu verwenden, und tun Sie es innerhalb Ihres Hobbys.

Zusammenfassung

Ich habe es lose geschrieben, aber selbst mit Python können Sie problemlos ein originales IoT-Gerät zu ausreichend niedrigen Kosten erstellen! Bitte probieren Sie es aus!

Recommended Posts

Einfaches und einfaches IoT-Leben mit Micropython!
AWS IoT Device Alive Monitoring
Einfache Verbindung zwischen Raspberry Pi und AWS IoT
Einfaches IoT, um mit Raspeye und MESH zu beginnen
Dies und das mit reflektieren
Versuchen Sie es mit pytest-Overview und Samples-
Unterschied zwischen MicroPython und CPython
Erstellen Sie Ihre eigene IoT-Plattform mit Himbeerpi und ESP32 (Teil 1)