Předpokládáme, že máte ESP32 s nainstalovaným FW
podle návodu: https://www.octopuslab.cz/micropython-octopus/
>>> octopus() --> autoInit: I2C | Led | piezzo | ws | OLED | ,'''`. / \ |(@)(@)| ) ( /,'))((`.\ (( (( )) )) ) \ `)(' / ( (octopusLAB - lib.version: 0.86 > 7.9.2019 #771) | ESP UID: cc50e3b6d76c | RAM free: 61824 | 10:23 This is basic library, type h() for help Pro inicializaci a test oled displeje: >>> from util.octopus import oled_init() >>> oled = oled_init()
Struktura dat na octopus ESP
v rootu (kořenový adresář): boot.py > spouští se po restarutu main.py > hlavní program podadresáře: util - octopus knihovny, moduly a utility lib - pro knihovny třetích stran config - konfigurační soubory, nejvíce json boards - definice pinoutů assets - doplňkové datové soubory www - adresář webresrveru pro wifi setup i ide editor examples - příklady templates - variace boot a main pro projekty ...
./util
analog buzzer database display7 led oled rgb servo colors.py display_segment.py instal_local_tar.py io_config.py io_test.py iot_garden.py mqtt.py mqtt_connect.py octopus.py octopus_demo.py octopus_help.txt octopus_lib.py pinout.py setup.py sys_info.py wifi_connect.py ws_rgb.py
./config
device.json HW: které zařízení ve kterém boardu
io.json HW: input/outuput nastavení periferií
wifi.json seznam používaných lokálních WiFi sítí
případně i:
garden.json
a jiné
parametry nastavení:
>>> io_conf jak jsou nastaveny / konfigurovány i/o prostředky:
{'led': 1, 'temp': 1, 'lcd': 2, 'ws': 1, 'relay': 0, 'ir': 1, 'led7': 1}
>>> led.pin
Pin(2)
io_conf["led"]
> 1
poznámka:
update nepřehrává konfigurační soubory, které se nastavují v setup()
>>> dir() > dostupné proměnné a metody
>>> gc.collect()
> uvolní místo v RAM (odmazání "casch")
>>> i() > info vrátí i odkaz na soubor pinů (*.py) který se dá zobrazit:
>>> f("název.py")
setup()
Nejvíce využíváme:
w – pro nastavení wifi (přidáním „add“)
cw – pro připojení k wifi
sd – stažení aktuální stabilní verze FW
ds – prvotní nastavení vývojové deky (pinouty)
ios – průběžné definování periferií
octopus() from util.octopus import * (pouze pro testy v terminálu, nedoporučujeme vybírat * vše v projektech, přicházíte tak o paměť RAM, správně je výčtem vybrat jen potřebné) h() = o_help() i() = o_info() c() = clt() clear terminal w() = w_connect() r() = system reset ls(directory) výpis obsahu adresáře, např ls("examples") f(file) zobrazení obsahu souboru, např f("main.py") file_copy() zkopírování souboru - default do main.py, např. file_copy("examples/clock.py") *_init() obecná inicializace, příprava, většinou vytváří instanci objektu i2c = ic2_init() dev = i2c.scan() hex(dev[0]) d7 = disp7_init() d7.show("abc") d7.show(123.567) o = oled_init() d2 = lcd2_init() time_init() db = database_init() db.addOne("key1","val1") db.listAll() ap = ap_init() ap.scan() boot.py main.py
./examples
>>> ls("examples") battery_monitoring.py blink.py button2oled.py button_irq.py clock.py data_logger_py deep_sleep1.py empty.py expander_8bit.py get_bitcoin.py led_and_button.py oled128x32_digits.py oled_battery_monitoring.py oled_oscillo.py oled_pong.py oled_random_lines.py oscilloscope.py remote_terminal.py stopwatch.py twitter_rgb.py web-ide.py webserver1.py webserver2.py
Co dalšího umí octopus()
AP (access point)
Webserver
Popis webserveru s přihlédnutím na Web-IDE je na samostatné podstránce: https://www.octopuslab.cz/micropython-web-ide/
Databáze
Zatím jsme jen nahrubo zkoušeli jaký databázový stroj je v Micropythonu vestavěn a v duchu zjednodušení a testování, jsme udělali nástin jednoduchého modulu:
>>> db.data["one"] b'11'
Micropython – vestavěný help
>>> help()
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("", "") # Connect to an AP
sta_if.isconnected() # Check for successful connection
dir | modules | …
>>> dir() >>> import machine >>> machine.listdir() >>> help("modules")
Nejvíce využíváme:
machine
esp32
time
dále pak:
esp
io
json
math
neopixel
onewire
ds18x20
ubinascii
ujson
uos
urandom
usocket
webrepl
utime
Jednořádkové příkazy
Základy Pythonu
a = 123 import math math. a po tečce stisknout TAB > vypíše vám: __class__ __name__ pow acos acosh asin asinh atan atan2 atanh ceil copysign cos cosh degrees e erf erfc exp expm1 fabs floor fmod frexp gamma isfinite isinf isnan ldexp lgamma log log10 log2 modf pi radians sin sinh sqrt tan tanh trunc math.log10(1000) math.pi def suma(x, y): return x + y suma (1, 2) sumaL = lambda a, b: a + b sumaL(1, 2)
Instalace
octopus_initial.setup() w a "ssid" "pass" cw sd update: octopus() w() from util.setup import deploy deploy("https://octopusengine.org/download/micropython/stable.tar") a od verze 0.85 už postačí jenom: octopus() u()
Nastavení
setup()
ESP32
teplota u procesoru: >>> import esp32 >>> esp32.raw_temperature() 127 hallova sonda - magnetického pole: >>> import esp32 >>> esp32.hall_sensor() 129 cca standard hodnota >>> esp32.hall_sensor() 976 po přiložení magnetu
octopus()
octopus() h() = o_help() i() = o_info() c() = clt() clear terminal w() = w_connect() u() = system update / upgrade r() = system reset *_init() obecná inicializace, příprava, většinou vytváří instanci objektu, se kterou dále pracujeme (instance má metody a vlastnosti definované objektem) d7 = disp7_init() o = oled_init() d2 = lcd2_init() time_init() s1 = servo_init() temp = temp_init() ... rychlý "init" a datová struktura o inicializovaných objektech: >>> octopus_init() provede init se všemi nastavenými periferiemi octopus() - starší verze připravujeme: o = octopus()
Blikáme – pípáme
from util.led import Led led = Led(2) from util.rgb import Rgb ws = Rgb() ws.color(RED) ws.color(BLUE) ws.color(BLACK) piezzo = Buzzer(18) piezzo.beep() napřímo přes octopus(): beep()
Displeje
d7 = disp7_init() oled = oled_init() oled.fill() oled.show() oled.hline(x, y, h, color) oled.vline(x, y, h, color) 16) w() 17) web_server()
Vstupy
B0 = button_init(0) button(B0) if button(B0)[0] t = temp_init() get_temp(t[0],t[1]) get_temp(*t) from util.rgb import wheel ws.color(wheel( int((get_temp(t[0],t[1])-20)*20))) d7.show(get_temp(*t)) photo = Analog(36) photo.read() photo.get_adc_aver(20)
mechatronika
from util.servo import Servo s1 = servo_init() s1.set_degree(90)
examples
ls("examples") import examples.clock file_copy("examples.clock") octopus() >>> w() >>> from examples.twitter_rgb import twitter_rgb >>> ws.color(twitter_rgb())