La vie IoT facile et facile avec Micropython!

Ce message est

Calendrier de l'Avent Python 2019 C'est le troisième jour de publication.

Micropython est bon

Raspberry Pi de côté La série dite ESP32 peut utiliser le Wifi, mais comme Arduino, c'est un substitut qui brûle le programme en ROM et l'exécute, il s'agit essentiellement d'un programme de type langage C utilisant l'IDE d'Arduino. J'écris.

···Mais

La requête HTTP est paresseuse www Même s'il s'agit de l'IoT uniquement en liant les données des points de périphérie avec SaaS Honnêtement, vous vous sentez démotivé lorsque les requêtes HTTP sont lentes.

Écrivez comme ça avec Arduino

Exemple d'esquisse du client Http Arduino

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);
}

Même si je publie juste, c'est bâclé www Eh bien, j'espère m'y habituer, mais c'est vraiment mauvais ...

Pour utiliser MicroPython ...

Pour le moment, nous avons besoin d'une fondation.

Fondation

Je pense que ce domaine est bon.

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

Vous pouvez utiliser la série ESP32 bon marché vendue sur Amazon. Pour être honnête, il y a un problème de compétence, et même si elle est marquée, il y a aussi un problème de savoir si elle est vraiment authentique, alors achetez cette zone dans un endroit solide.

Veuillez consulter ce manuel pour la méthode d'installation.

Premiers pas avec MicroPython avec ESP32

Comment écrire

MicroPython est conçu de telle sorte qu'à la mise sous tension, boot.py est d'abord exécuté, puis main.py est exécuté.

boot.py

Ce sera le premier fichier Python à être appelé lors de la mise sous tension. Fondamentalement, c'est une bonne idée d'incorporer un processus qui se connecte au Wifi.

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

Ce sera un fichier Python qui sera exécuté lorsque l'exécution de boot.py se terminera normalement. Si vous avez fait Arduino etc., vous pouvez comprendre Fondamentalement, ce fichier Python suppose une ** boucle infinie **.

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: #boucle infinie
    aaaaaa()
    time.sleep(1)

point important

Il n'a pas autant de zone de stockage et de zone de mémoire d'exécution (zone de tas) qu'un ordinateur personnel ou un Raspberry Pi. Comme vous pouvez le voir dans cet article, il y en a pas mal.

[travail électronique mgo-tec: méthode d'acquisition d'informations d'adresse MAC de mémoire de puce ESP32-WROOM-32](https://www.mgo-tec.com/blog-entry-chip-info-esp-wroom-32-esp32 .html)

Veuillez noter que si vous le codez de manière lâche, la zone de tas sera utilisée en un clin d'œil, GC se produira fréquemment ou le fichier Python que vous avez créé ne sera pas inclus.

Comment faire une requête http?

En Python, je pense qu'il utilise la bibliothèque de requêtes Pour MicroPython, utilisez la bibliothèque urequests. La fonctionnalité est presque la même que celle de la bibliothèque de requêtes.

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

Et les autres bibliothèques? ??

En gros, j'aimerais que vous puissiez voir ça ...

github MicroPython Lib

Qu'en est-il des bibliothèques d'appareils IoT?

Adafruit, qui fabrique de nombreux capteurs de température, dispose également d'une bibliothèque pour Python.

github Adafruit

En utilisant cela, il est possible de contrôler facilement les appareils IoT.

Adafruit est cher, mais le chinois vendu sur Amazon n'est-il pas mauvais?

Bien que cela ne soit pas recommandé, il y en a qui peuvent être utilisés si les bases telles que les capteurs utilisés sont les mêmes. Cependant, il existe des pièges, donc à vos risques et périls. Vous devrez peut-être modifier une partie de la bibliothèque. Veuillez cesser de l'utiliser pour vos propres produits et faites-le dans votre hobby.

Résumé

Je l'ai écrit vaguement, mais même avec Python, vous pouvez facilement créer un appareil IoT original à un coût suffisamment bas! Essayez-le!

Recommended Posts

La vie IoT facile et facile avec Micropython!
Surveillance active des appareils AWS IoT
Connexion facile entre Raspberry Pi et AWS IoT
IoT facile pour démarrer avec Raspeye et MESH
Ceci et cela en utilisant Reflect
Essayez d'utiliser pytest-Overview and Samples-
Différence entre MicroPython et CPython
Créez votre propre plateforme IoT en utilisant raspberrypi et ESP32 (partie 1)