Дистанционное управление ESP8266 — первый опыт прошивки MicroPython

Интернет вещей малиновый пирог

Введение

Используйте FRP для NAT IP-адреса частной сети Raspberry Pi на облачный сервер в общедоступной сети и используйте USB-соединение между Raspberry Pi и ESP8266 для реализации удаленного управления ESP8266.

Введение в среду разработки

Сегодняшний герой выглядит так:

Таобао 10 юаней. Мне было лень ставить на свою машину всякие пакеты, поэтому я нашел для нее трамплинную машину, выглядит она вот так
Этот немного дороже. Но его попросила учительница перед выпускным, без денег. После установки системы Linux просто подключитесь к ней по ssh. Было бы неплохо написать несколько строк операторов с помощью vim. Но когда я обнаруживаю, что меня нет дома, я ничего не могу сделать, чтобы вытащить свой компьютер и хочу немного поиграть, поэтому необходимо потратить некоторое время на проникновение в интрасеть: использовать FRP для проникновения в интрасеть. Требуется облачный сервер. В то время я как раз закончил, когда купил его, и попросил у Учителя Би Ше денег на покупку облачного сервера на два года. Не могу писать на C или C++. Итак, я нашел прошивку microPython для esp8266, не было бы неплохо написать Python напрямую? (Если умеете писать на C, можете попробовать AliOS Things) Писать операторы на REPL удобно для тестирования, но очень неудобно их сохранять. Самому отлаживать нормально, формально что-то написать невозможно. Предоставляется официальный WebREPL, который может поддерживать загрузку файлов: WebREPL Github Repo щелкните здесь, независимо от того, загружается ли он локально или на трамплин. использовать webrepl.pyСинхронизация доски и трамплина (локальная) может быть завершена. Также необходимо установить трамплинesptool, прошил в него прошивку. Разумеется, между трамплином и esp8266 необходим кабель microUSB (у купленного мной esp8266 есть микросхема USB2UART — CP2102).

# install esptool
pip install esptool
# download bin file
wget http://micropython.org/resources/firmware/esp8266-20191220-v1.12.bin

Вам также понадобится машина для разработки под рукой, как Mac, так и Linux (при условии, что вы можете открыть терминал и иметь сеть) или напрямую использовать raspberry, но условия не такие уж сложные. Т.к. ресурсы трамплинной машины (малина) относительно ограничены, я ее не устанавливалvirtulenv, если ресурсы компьютера относительно богаты, рекомендуется использовать среду venv, а с плагином autoenv для zsh эффективность явно повышается.

Write Flash

Производитель esp8266 предоставляет прошивку, но я не знаю языка C. Итак, сначала просто очистите исходную прошивку и прошейте прошивку, поддерживающую microPython.


# erase flash
esptool.py --port /dev/ttyUSB0 erase_flash
# write new flash
esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect -fm dio 0 esp8266-20191220-v1.12.bin

в /dev/tty*это порт, соответствующий esp8266, который варьируется от машины к машине. В целом /dev/ttyUSB0(малина) или/dev/cu.SLAB_USBtoUART(мак). Windows обычно COM*. Обычно рекомендуется использовать Window в качестве основной машины для разработки встраиваемых систем.Но я не люблю Windows.

Протест-fm dioНужно добавить, конкретные причины объясняются в официальной документации:

For some boards with a particular FlashROM configuration (e.g. some variants of a NodeMCU board) you may need to use the following command to deploy the firmware (note the -fm dio option)

Затем прошивается прошивка.

Wi-Fi подключение к сети

Можно сказать, что если нет сети, ESP8266 не во что играть. После прошивки прошивки microPython нужно нажатьRST ключ. Тогда вы можете пройтиscreenПодключитесь к microPython REPL (требуется USB-кабель)

# attach raspberry
ssh -i ~/.ssh/id_rpi -oPort=9434 pi@192.168.1.2

# attach microPython REPL
screen /dev/ttyUSB0 115200

Затем введите microPythonREPL

MicroPython v1.12 on 2019-12-20; ESP module with ESP8266
Type "help()" for more information.
>>>

Откройте webREPL, затем вы сможете загружать файлы на доску

>>> import webrepl_setup

Просто следуйте инструкциям. Неудивительно, что вы успешно открыли WebREPL и установили пароль.

WebREPL daemon started on ws://192.168.4.1:8266

Затем убедитесь, что он находится в той же локальной сети, что и Esp8266~.. Если есть машина-трамплин, она должна находиться в той же локальной сети, что и машина-трамплин и esp8266, и машина может получить доступ к машине-трамплину. Плата сама создаст WIFI, имяMicroPython-xxxxxx, пароль _micropythonN_ и следующий склад будетcloneПерейдите на трамплин или локально и начните

git clone git@github.com:micropython/webrepl.git

Затем создайте файл локальноboot.py. Этот файл будет выполнен автоматически после начала работы платы.

# -*- coding:utf-8 -*-
# 2020-02-13
# https://docs.micropython.org/en/latest/esp8266/quickref.html#networking

import network

def init_wifi_conn(wlan, ssid, pwd):
    wlan.active(True)
    wlan.connect(ssid, pwd)
    while not wlan.isconnected():
        pass
    print("network config:", wlan.ifconfig())


def do_connection():
    sta_if = network.WLAN(network.STA_IF)
    
    # remember modify ssid and pwd.
    ssid = "your_wifi_ssid"
    pwd = "your_wifi_pwd"
    if not sta_if.isconnected():
        init_wifi_conn(sta_if, ssid, pwd)


if __name__ == '__main__':
    import webrepl
    do_connection()
    webrepl.start()

Затем выполните следующую команду на трамплине, чтобы отправить локальный файл на esp8266:

# cd webrepl

./webrepl_cli.py -p 1234 boot.py  192.168.4.1:/boot.py

Затем зажмите кнопку сброса платы и передайтеscreenВведите REPL microPython для просмотра и обнаружите, что у webREPL есть дополнительный адрес, как показано на следующем рисунке:


WebREPL daemon started on ws://192.168.4.1:8266
WebREPL daemon started on ws://192.168.1.2:8266
Started webrepl in normal mode

следующее192.168.1.2Это IP-адрес, назначенный Esp8266 маршрутизатором. WebREPL также может использовать веб-версию следующим образом:


# cd webrepl

python3 -m http.server

Затем локальный браузер получает доступhttp://{跳板机IP}:8000/webrepl.html, так же можно подключить esp8266

GPIO

Определение интерфейса GPIO показано на приведенной выше справочной схеме, и с помощью GPIO можно реализовать некоторые очень интересные вещи.

Нажмите и удерживайте в течение двух секунд, чтобы определить QR-код, которому нужно следовать.

Диалоговое окно общедоступной учетной записи, ответьте на ключевое слово «ByteDance Internal Push».Получите внутренний push-код ByteDance