Связь ESP8266 и Python
Я новичок в работе с сетями и работе с ESP8266. Я успешно настроил свой ESP8266 и могу запрограммировать его из Arduino IDE (протестировал мигающий код).
Я хочу отправить некоторые данные из скрипта Python, запущенного на моем ПК, на ESP8266. Подобно установке, где используется PySerial в Python, откройте COM-порт и отправьте мои последовательные данные в Arduino. Arduino проанализирует мои байты данных и выполнит какое-то действие. Теперь я пытаюсь добиться того же, заменив ESP8266 и UART беспроводной связью.
Во-первых, я хотел бы подключить свой компьютер к ESP, у которого будет собственный SSID и пароль. После подключения я хотел бы отправить байты данных из скрипта Python на ESP8266 по беспроводной сети. Теперь аналогичным образом ESP будет анализировать полученные данные и выполнять некоторые функции (например, управлять своими GPIO).
Как этого добиться? Это кажется довольно простой задачей, но я действительно смущен тем, какой режим я должен использовать (AP? Клиент? Сервер?). Какой протокол для связи лучше (TCP? MQTT?). Что делают такие функции, как Handle client/root? Я понимаю, что мне нужно использовать программирование сокетов на Python, как это сделать конкретно в моем случае? Как буферизовать входящие данные в ESP, чтобы не пропустить байты?
Может ли кто-нибудь объяснить, используя аналогию с беспроводной связью и UART? Любые ссылки на учебники также будут полезны. В Интернете есть несколько учебных пособий, в которых они делают это с помощью HTTP-сервера и управляют GPIO из браузера, но нет, я этого не хочу. Я просто хочу отправить свои данные так же, как с COM-портом/UART/Arduino!
@heethesh, 👍1
Обсуждение3 ответа
Простейшим IP-эквивалентом UART являются сокеты TCP/IP. Создайте прослушивающий сокет на ESP8266 и подключитесь к нему с ПК (или наоборот, если хотите). Данные, подаваемые с одного конца, выходят с другого — как через последовательный порт.
Есть примеры с ядром ESP8266, которые делают именно это.
Вы должны настроить ESP как точку доступа, если хотите, чтобы у него был собственный IP-адрес. Вы затем настраиваете tcp-сервер на ESP (думаю, в IDE есть примеры функций).
Имейте в виду, что связь (сервер/клиент, которую вы упомянули) не имеет ничего общего с тем, как ПК и ESP соединены (предоставляет ли ESP точку доступа или входит в ваш WiFi). Это разные уровни протокола, что означает, что вам не нужно вносить никаких изменений, если вы хотите, чтобы ПК и ESP вообще обменивались данными через ваш маршрутизатор.
На самом деле ESP (или, по крайней мере, для ESP8266-12F, насколько я знаю точно) способен запускать и ap, и wificlient одновременно.
Это не имеет большого значения для последовательной связи, вам нужно будет опрашивать входящие сообщения в вашем цикле, если вы хотите запустить сервер. Отправка сообщений на ваш компьютер аналогична печати через последовательный интерфейс.
Проверьте мой проект: "Esp 2 Python"
https://github.com/KebabLord/esp_to_python
Теоретически вы можете создать локальный хост и получать данные датчика или управлять модулем через запросы Arduino или модули urllib с помощью простого локального сервера mDNS. Этот проект позволяет вам контролировать и читать ESP.
Я не мог заставить ваш код работать, @DrBwts
это был буквально суп, я радикально упростил его, теперь он слишком прост в использовании, попробуйте еще раз :3, @Juko
- Причина сброса wdt: 4, режим загрузки: (3,6)
- Постоянное отключение ESP8266 SocketIOclient с Python WebServerSocket
- Тайм-аут узла ESP8266 после подключения к сокету python
- Программирование Arduino с использованием Python, а не C/C ++
- Как читать и записывать EEPROM в ESP8266
- Как сделать выводы Tx и Rx на ESP-8266-01 в выводах GPIO?
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
- Как заставить 5-вольтовое реле работать с NodeMCU
как веб-разработчик, я считаю http самым простым методом взаимодействия: четкий цикл req/res, встроенные парсеры для GET-параметров, коды состояния, простая отладка с других устройств и т. д. с потоками нужно много нюхать вне., @dandavis