micropython-octopus-help

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

util/octopus.py má metodu ls()
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)

AP (access point s vlastní WiFi – využijeme pro nastavení WiFi v neznámém prostředí)

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:

vycházíme z „btree“
>>> db.data["one"]    
b'11' 
tři záznamy? WTF) zatím teda json vychází líp 🙂
ještě časem porovnáme pro více hodnot

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")
>>> help(„modules“)
nám vypíše dostupné moduy

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