Skip to content

MicroPython ​

Mengirim bacaan dengan MicroPython dari ESP32, Raspberry Pi Pico W, atau papan lain yang punya WiFi. Kodenya Python biasa, disimpan sebagai main.py di papan.

Yang dibutuhkan ​

  • Papan dengan firmware MicroPython 1.23 atau lebih baru. Unduh firmware untuk papan Anda di micropython.org/download.
  • Thonny untuk menyalin file ke papan dan melihat keluarannya.
  • WiFi 2,4 GHz.
  • Perangkat yang sudah dibuat di INCLUDE. Belum ada? Ikuti Perangkat rakitan sendiri, langkah 1.

1. Sambungkan Thonny ke papan ​

  1. Colokkan papan, buka Thonny.
  2. Run > Configure interpreter.
  3. Pilih MicroPython (ESP32) atau MicroPython (Raspberry Pi Pico), dan port papannya.
  4. Tekan OK. Di panel Shell muncul >>>.

2. Ambil kodenya dari INCLUDE ​

  1. Buka perangkat Anda, tab Pengaturan, lalu Koneksi & Integrasi.
  2. Di Contoh kode, pilih HTTP dan tab MicroPython, lalu Salin.

Contoh kode MicroPython di layar Koneksi & Integrasi

3. Simpan sebagai main.py ​

py
import time

import network
import requests

WIFI_SSID = "your-wifi"
WIFI_PASSWORD = "your-password"
URL = "https://app.include.co.id/api/v1/YOUR_DEVICE_TOKEN/telemetry"

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(WIFI_SSID, WIFI_PASSWORD)
while not wlan.isconnected():
    time.sleep(0.5)
print("WiFi connected")


def read_sensor():
    # Replace with your sensor reading.
    return {"temperature": 25.4, "humidity": 61}


while True:
    try:
        r = requests.post(URL, json=read_sensor())
        print(r.status_code, r.text)
        r.close()
    except OSError as e:
        print("send failed:", e)
    time.sleep(10)
  1. Tempel ke file baru di Thonny.
  2. Isi WIFI_SSID dan WIFI_PASSWORD, dan ganti isi read_sensor() dengan bacaan sensor Anda.
  3. File > Save as > MicroPython device, beri nama main.py.
  4. Tekan tombol reset di papan, atau Run > Send EOF / Soft reboot.

Di panel Shell:

WiFi connected
202 {"ok":true}

Papan menjalankan main.py setiap kali menyala, jadi ia tetap mengirim walau dilepas dari komputer.

Lewat MQTT ​

Di Contoh kode, pilih MQTT dan tab MicroPython.

py
import json
import time

import network
from umqtt.simple import MQTTClient

WIFI_SSID = "your-wifi"
WIFI_PASSWORD = "your-password"
HOST = "app.include.co.id"
DEVICE_ID = "YOUR_DEVICE_ID"
DEVICE_TOKEN = "YOUR_DEVICE_TOKEN"
TOPIC = "includeapps/YOUR_ORG_ID/YOUR_SOLUTION_SLUG/YOUR_DEVICE_ID/telemetry"

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(WIFI_SSID, WIFI_PASSWORD)
while not wlan.isconnected():
    time.sleep(0.5)
print("WiFi connected")

client = MQTTClient(DEVICE_ID, HOST, port=1883, user=DEVICE_ID, password=DEVICE_TOKEN,
                    keepalive=60)
client.connect()
print("connected")


def read_sensor():
    # Replace with your sensor reading.
    return {"temperature": 25.4, "humidity": 61}


while True:
    client.publish(TOPIC, json.dumps(read_sensor()))
    print("sent")
    time.sleep(10)

Kalau muncul ImportError: no module named 'umqtt', pasang dulu dari Shell, dengan papan sudah tersambung ke WiFi:

python
import mip
mip.install("umqtt.simple")

Untuk ImportError: no module named 'requests' caranya sama, dengan mip.install("requests").

Contoh ini memakai port 1883. Untuk koneksi terenkripsi, pilih port 8883 (TLS) di Contoh kode:

py
import json
import ssl
import time

import network
from umqtt.simple import MQTTClient

WIFI_SSID = "your-wifi"
WIFI_PASSWORD = "your-password"
HOST = "app.include.co.id"
DEVICE_ID = "YOUR_DEVICE_ID"
DEVICE_TOKEN = "YOUR_DEVICE_TOKEN"
TOPIC = "includeapps/YOUR_ORG_ID/YOUR_SOLUTION_SLUG/YOUR_DEVICE_ID/telemetry"

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(WIFI_SSID, WIFI_PASSWORD)
while not wlan.isconnected():
    time.sleep(0.5)
print("WiFi connected")

context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.verify_mode = ssl.CERT_NONE
client = MQTTClient(DEVICE_ID, HOST, port=8883, user=DEVICE_ID, password=DEVICE_TOKEN,
                    keepalive=60, ssl=context)
client.connect()
print("connected")


def read_sensor():
    # Replace with your sensor reading.
    return {"temperature": 25.4, "humidity": 61}


while True:
    client.publish(TOPIC, json.dumps(read_sensor()))
    print("sent")
    time.sleep(10)

Tentang sertifikat ​

Contoh HTTP dan contoh MQTT port 8883 mengenkripsi koneksi, tetapi tidak memeriksa sertifikat server. Contoh MQTT port 1883 tidak dienkripsi sama sekali. Memeriksanya di MicroPython butuh sertifikat akar dalam bentuk DER dan jam yang benar dari ntptime, dan dukungannya berbeda antarpapan. Untuk perangkat di jaringan yang tidak Anda kendalikan, pakai ESP32 dengan Arduino, yang memeriksa sertifikat.

Membaca sensor sungguhan ​

Contoh untuk sensor suhu DHT22 di pin 4 (modul dht sudah ada di firmware ESP32 dan Pico W):

python
import dht
from machine import Pin

sensor = dht.DHT22(Pin(4))


def read_sensor():
    sensor.measure()
    return {"temperature": sensor.temperature(), "humidity": sensor.humidity()}

Kalau tidak berhasil ​

Di ShellArtinya
Tidak pernah WiFi connectedNama atau kata sandi WiFi salah, atau WiFi-nya 5 GHz.
OSError: -202 atau [Errno 113]Server tidak terjangkau. Periksa internet dari WiFi itu.
401Token salah. Salin ulang kode dari Koneksi & Integrasi.
MQTTException: 5Device ID atau Device Token salah.
MemoryErrorMemori papan habis. Matikan program lain di main.py, atau pakai HTTP.

Lihat juga Data belum masuk.

INCLUDE AIoT Platform for Smart Industry