Ivaylo Radev's avatar

Ивайло Радев

интернет кибик

🇧🇬 📷 🔌 🔧 🔨 🍺

MicroPython на ESP8266

Инсталиране

1. Изтеглете и запишете Python 2. Отворите Terminal и инсталирайте esptool Команда:
pip install esptool
3. Включете вашия ESP8266 в USB порт; 4. Направете копие на стария firmware; Команда:
esptool.py --port {USB_PORT} --baud 115200 read_flash 0x00000 0x400000 image4M.bin
5. Отидете на MicroPython firmware downloads и изтеглете последния firmware за вашия ESP8266 модул. 6. Форматиране и изтриване на стария firmware: Команда:
esptool.py --port {USB_PORT} erase_flash
Примерен отговор:
esptool.py v3.2 Serial port {USB_PORT} Connecting.... Detecting chip type... Unsupported detection protocol, switching and trying again... Connecting.... Detecting chip type... ESP8266 Chip is ESP8266EX Features: WiFi Crystal is 26MHz MAC: 84:f3:eb:b2:10:cd Uploading stub... Running stub... Stub running... Erasing flash (this may take a while)... Chip erase completed successfully in 7.1s Hard resetting via RTS pin...
7. Инсталиране на нов firmware: Команда:
esptool.py --port {USB_PORT} --baud 460800 write_flash --flash_size=detect 0 /path_to_file/esp8266-{FILE_VERSION}.bin
Примерен отговор:
esptool.py v3.2 Serial port {USB_PORT} Connecting.... Detecting chip type... Unsupported detection protocol, switching and trying again... Connecting.... Detecting chip type... ESP8266 Chip is ESP8266EX Features: WiFi Crystal is 26MHz MAC: 84:f3:eb:b2:10:cd Uploading stub... Running stub... Stub running... Changing baud rate to 460800 Changed. Configuring flash size... Auto-detected Flash size: 4MB Flash will be erased from 0x00000000 to 0x0009afff... Flash params set to 0x0040 Compressed 633688 bytes to 416262... Writing at 0x00000000... (3 %) Writing at 0x000057fc... (7 %) Writing at 0x0000c338... (11 %) .... Writing at 0x00098493... (100 %) Wrote 633688 bytes (416262 compressed) at 0x00000000 in 9.4 seconds (effective 540.0 kbit/s)... Hash of data verified. Leaving... Hard resetting via RTS pin...
8. Проверете връзката към ESP8266. Инсталирайте PuTTY or Thonny 9. Направете серийна връзка с {USB_PORT}, към който е свързан модулът. Примерен отговор:
MicroPython v1.17 on 2021-09-02; ESP module with ESP8266 Type "help()" for more information. >>>

Стартиране

Има два файла, които се третират специално от ESP8266, когато се стартира: boot.py и main.py. Скриптът boot.py се първо изпълнява (ако съществува) и след това, след като завърши - се изпълнява скриптът main.py. Можете сами да създадете тези файлове и да ги попълните с кода, който искате да стартирате, когато устройството се стартира.

Команди

Файлове система Проверка на качените файлове:
>>> import os >>> os.listdir()
Изтриване на файл:
os.remove('test.py')
Нов файл:
>>> f = open('data.txt', 'w') >>> f.write('some data') >>> f.close()
Редакция на файл:
>>> f = open('data.txt', 'a') >>> f.write('some new data\n') >>> f.close()
Четене на файл:
>>> f = open('data.txt') >>> f.read() 'some data' >>> f.close()
Създаване на директория:
>>> os.mkdir('dir')
Мрежи Основна WiFi конфигурация:
import network sta_if = network.WLAN(network.STA_IF); sta_if.active(True) sta_if.scan() # Scan for available access points sta_if.connect("<AP_name>", "<password>") # Connect to an AP sta_if.isconnected() # Check for successful connection sta_if.ifconfig() # See IP Address # Change name/password of ESP8266's AP: ap_if = network.WLAN(network.AP_IF) ap_if.config(essid="<AP_NAME>", authmode=network.AUTH_WPA_WPA2_PSK, password="<password>") # Change Device name sta_if.config(dhcp_hostname="NEW DEVICE NAME") print(sta_if.config('dhcp_hostname'))
Pins and GPIO cdn/Wemos-D1-Mini.png Наличните пинове са: 0, 1, 2, 3, 4, 5, 12, 13, 14, 15, 16, които съответстват на действителните номера на GPIO пинове на чипа ESP8266.
from machine import Pin p0 = Pin(0, Pin.OUT) # create output pin on GPIO0 p0.high() # set pin to high p0.low() # set pin to low p0.value(1) # set pin to high p2 = Pin(2, Pin.IN) # create input pin on GPIO2 print(p2.value()) # get value, 0 or 1 p4 = Pin(4, Pin.IN, Pin.PULL_UP) # enable internal pull-up resistor p5 = Pin(5, Pin.OUT, value=1) # set pin high on creation
Delay and timing
import time time.sleep(1) # sleep for 1 second time.sleep_ms(500) # sleep for 500 milliseconds time.sleep_us(10) # sleep for 10 microseconds start = time.ticks_ms() # get millisecond counter delta = time.ticks_diff(start, time.ticks_ms()) # compute time difference
Analog read ADC се предлага на специален pin. Обърнете внимание, че входните напрежения на pin на ADC трябва да са между 0v и 1v.
from machine import ADC adc = ADC(0) # create ADC object on ADC pin adc.read() # read value, 0-1024
Digital read
from machine import Pin from time import sleep_ms button = Pin(4, Pin.IN) while(True): print(button.value()) sleep_ms(100)
Deep-sleep Свържете GPIO16 (D0) към pin за нулиране (RST). Тогава следният код може да се използва за заспиване, събуждане и проверка на причината за рестартиране:
import machine # configure RTC.ALARM0 to be able to wake the device rtc = machine.RTC() rtc.irq(trigger=rtc.ALARM0, wake=machine.DEEPSLEEP) # check if the device woke from a deep sleep if machine.reset_cause() == machine.DEEPSLEEP_RESET: print('woke from a deep sleep') # set RTC.ALARM0 to fire after 10 seconds (waking the device) rtc.alarm(rtc.ALARM0, 10000) # put the device to sleep machine.deepsleep()
WebREPL WebREPL (REPL през WebSockets, достъпен чрез уеб браузър) е експериментална функция, налична в ESP8266. Изтеглете уеб клиент от GitHub
import webrepl webrepl.start()
При първо свързване ще трябва да зададете парола, която ще използвате за бъдещи сесии. Управление на паметта Garbage collector - обикновено има две отговорности: - Разпределяне на нови обекти в наличната памет. - Освобождаване на памет. Функционалността на Garbage collector-а в MicroPython е достъпна чрез вградения gc модул:
>>> x = 5 >>> x 5 >>> import gc >>> gc.enable() >>> gc.mem_alloc() 1312 >>> gc.mem_free() 2071392 >>> gc.collect() 19 >>> gc.disable() >>>
gc.enable() - Включва garbage collection. gc.disable() - Изключва automatic garbage collection. Можете да изчистите паметта, но ръчно с команда gc.collect(). gc.collect() - Пускане на garbage collection. gc.mem_alloc() - Показва използвана памет в байтове; gc.mem_free() - Показва свободната памет в байтове, или -1, ако данните не са известни.

Езикови примери

Conditional Statements Условните изрази позволяват контрол върху това кои елементи от кода се изпълняват в зависимост от конкретни случаи.
temperature = 15 target = 10 if temperature > target: print("Too High!") elif temperature < target: print("Too Low!") else: print("Just right!")
Loops Циклите са друга важна характеристика на всеки език за програмиране. Това ви позволява да променяте кода си и да повтаряте функции/задачи/и т.н.
x = 0 for y in range(0, 9): x += 1 print(x)
x = 0 while x < 9: x += 1 print(x)
Functions Функциите са код, които се извикват по име. Данните могат да бъдат предадени в него, за да се работи с тях (т.е. параметрите) и по желание могат да върнат данни.
def add(number1, number2): return number1 + number2 add(1, 2) # expect a result of 3
def welcome(name): welcome_phrase = "Hello, " + name + "!" print(welcome_phrase) welcome("User") # expect "Hello, User!"
Lists Структура от данни, която съдържа подредена колекция (последователност) от елементи.
networks = ['lora', 'sigfox', 'wifi', 'bluetooth', 'lte-m'] print(networks[2]) # expect 'wifi'