На данный момент модуль ESP8266-01 (ESP-01) является одним из самых дешевых Wi-Fi модулей, доступных на рынке. В данной статье мы рассмотрим подключение модуля ESP8266 к плате Raspberry Pi Pico с помощью языка программирования MicroPython и библиотеки ESP8266.
Модуль ESP8266-01 поставляется со встроенным программным обеспечением (прошивкой), доступ к которому можно осуществить по последовательному каналу связи (UART) с помощью AT команд. Используя язык Micropython мы можем подключить модуль ESP8266 к плате Raspberry Pi Pico и выполнять операции вида http get/post.
Также на нашем сайте вы можете прочитать серию обучающих статей по плате Raspberry Pi Pico.
Необходимые компоненты
- Модуль ESP8266-01 (купить на AliExpress).
- Плата Raspberry Pi Pico (купить на AliExpress).
- Резистор 1 кОм или 10 кОм (опционально подключенный между контактами 3.3v и EN модуля ESP8266) (купить на AliExpress).
- Макетная плата.
- Соединительные провода.
Реклама: ООО «АЛИБАБА.КОМ (РУ)» ИНН: 7703380158
Схема проекта
Схема подключения модуля ESP8266 к плате Raspberry Pi Pico представлена на следующем рисунке.
Красный провод на представленной схеме используется для соединения контакта VCC модуля ESP8266 с контактом 3.3V (контакт 36) платы Raspberry Pi Pico. Коричневый провод используется для подключения контакта CH_EN модуля ESP8266 к напряжению 3.3V. Передающий контакт модуля ESP8266 подключен к приемному контакту канала UART0 (контакт 2) платы Raspberry Pi Pico с помощью провода желтого цвета. Приемный контакт модуля ESP8266 подключен к передающему контакту канала UART0 (контакт 1) платы Raspberry Pi Pico с помощью провода оранжевого цвета. Все провода земли (ground) обозначены на схеме проводами черного цвета.
Объяснение программы для Raspberry Pi Pico для подключения модуля ESP8266
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
Перед началом работы над программой вам необходимо скачать каталог с обучающими программами для Raspberry Pi Pico с репозитория GitHub или скачать библиотеку MicroPython ESP8266 для выполнения операций HTTP Get/Post.
Для операции HTTP Get мы используем веб-сайт www.httpbin.org/ip чтобы получить IP адрес модуля ESP8266.
1 2 3 |
{ "origin": "223.229.136.70" } |
Для выполнения операций HTTP Post мы используем веб-сайт www.httpbin.org/post чтобы получать ответ Post с другими типами данных в формате Json. Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
{ "args": {}, "data": "{\"name\":\"Noyel\"}", "files": {}, "form": {}, "headers": { "Content-Length": "16", "Content-Type": "application/json", "Host": "httpbin.org", "User-Agent": "RPi-Pico", }, "json": { "name": "Noyel" }, "origin": "223.229.136.70", "url": "http://httpbin.org/post" } |
Теперь можем непосредственно приступить к написанию программы. Вначале подключим (импортируем) необходимые нам библиотеки и создадим объект esp01 с помощью функции ESP8266() – он будет необходим нам для выполнения операций HTTP.
1 2 3 4 5 |
from machine import UART, Pin import time from esp8266 import ESP8266 esp01 = ESP8266() esp8266_at_ver = None |
Затем мы будем вызывать функцию esp01.startUP() для проверки соединения между платой RaspberryPi Pico и модулем ESP8266.
После вызова функции esp01.startUP() мы затем будем вызывать функцию esp01.echoING() чтобы остановить AT команду Echo. После этого мы будем вызывать функцию esp01.setCurrentWiFiMode() чтобы установить WiFi режим STA+SoftAP. После настройки WiFi режима мы будем осуществлять попытку подключения к сети WiFi с помощью функции esp01.connectWiFi(«ssid»,»pwd») и ждать пока подключение не произойдет.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
print("StartUP",esp01.startUP()) #print("ReStart",esp01.reStart()) print("StartUP",esp01.startUP()) print("Echo-Off",esp01.echoING()) print("\r\n\r\n") ''' Print ESP8266 AT command version and SDK details ''' esp8266_at_var = esp01.getVersion() if(esp8266_at_var != None): print(esp8266_at_var) ''' set the current WiFi in SoftAP+STA ''' esp01.setCurrentWiFiMode() #apList = esp01.getAvailableAPs() #for items in apList: # print(items) #for item in tuple(items): # print(item) print("\r\n\r\n") ''' Connect with the WiFi ''' print("Try to connect with the WiFi..") while (1): if "WIFI CONNECTED" in esp01.connectWiFi("ssid","pwd"): print("ESP8266 connect with the WiFi..") break; else: print(".") time.sleep(2) |
После осуществления подключения к сети WiFi мы будем выполнять операции HTTP Get/Post. Для выполнения этих операций нам необходимо будет вызвать функции esp01.doHttpGet() и esp01.doHttpPost(). В функцию esp01.doHttpGet() нам необходимо передать Host-URL, путь к URL, User-Agent[опционально, по умолчанию “RPi-Pico”] и номер порта [опционально, по умолчанию “80”].
В функцию esp01.doHttpPost() нам необходимо передать Host-URL, путь к URL, User-Agent[опционально, по умолчанию “RPi-Pico”], content-type (тип контента) [ ex. application/json, text/plain etc], контент (content) и номер порта [опционально, по умолчанию “80”].
После выполнения каждой операции Get/Post функция возвращает код ошибки с ответом (HTTP Error Code with Response) – их мы будем выводить через порт последовательной связи.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
print("\r\n\r\n") print("Now it's time to start HTTP Get/Post Operation.......\r\n") while(1): led.toggle() time.sleep(1) ''' Going to do HTTP Get Operation with www.httpbin.org/ip, It return the IP address of the connected device ''' httpCode, httpRes = esp01.doHttpGet("www.httpbin.org","/ip","RaspberryPi-Pico", port=80) print("------------- www.httpbin.org/ip Get Operation Result -----------------------") print("HTTP Code:",httpCode) print("HTTP Response:",httpRes) print("-----------------------------------------------------------------------------\r\n\r\n") ''' Going to do HTTP Post Operation with www.httpbin.org/post ''' post_json="abcdefghijklmnopqrstuvwxyz" #"{\"name\":\"Noyel\"}" httpCode, httpRes = esp01.doHttpPost("www.httpbin.org","/post","RPi-Pico", "application/json",post_json,port=80) print("------------- www.httpbin.org/post Post Operation Result -----------------------") print("HTTP Code:",httpCode) print("HTTP Response:",httpRes) print("--------------------------------------------------------------------------------\r\n\r\n") #break |
Тестирование работы проекта
После того как аппаратная и программная части проекта будут готовы мы будем использовать экран оболочки Thonny чтобы просматривать принимаемые по последовательному порту данные.
Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.
Исходный код программы на MicroPython
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
from machine import UART, Pin import time from esp8266 import ESP8266 esp01 = ESP8266() esp8266_at_ver = None led=Pin(25,Pin.OUT) print("StartUP",esp01.startUP()) #print("ReStart",esp01.reStart()) print("StartUP",esp01.startUP()) print("Echo-Off",esp01.echoING()) print("\r\n\r\n") ''' Print ESP8266 AT command version and SDK details ''' esp8266_at_var = esp01.getVersion() if(esp8266_at_var != None): print(esp8266_at_var) ''' set the current WiFi in SoftAP+STA ''' esp01.setCurrentWiFiMode() #apList = esp01.getAvailableAPs() #for items in apList: # print(items) #for item in tuple(items): # print(item) print("\r\n\r\n") ''' Connect with the WiFi ''' print("Try to connect with the WiFi..") while (1): if "WIFI CONNECTED" in esp01.connectWiFi("ssid","pwd"): print("ESP8266 connect with the WiFi..") break; else: print(".") time.sleep(2) print("\r\n\r\n") print("Now it's time to start HTTP Get/Post Operation.......\r\n") while(1): led.toggle() time.sleep(1) ''' Going to do HTTP Get Operation with www.httpbin.org/ip, It return the IP address of the connected device (получаем IP адрес подключенного устройства) ''' httpCode, httpRes = esp01.doHttpGet("http://www.httpbin.org/","/ip","RaspberryPi-Pico", port=80) print("------------- www.httpbin.org/ip Get Operation Result -----------------------") print("HTTP Code:",httpCode) print("HTTP Response:",httpRes) print("-----------------------------------------------------------------------------\r\n\r\n") ''' Going to do HTTP Post Operation with www.httpbin.org/post ''' post_json="abcdefghijklmnopqrstuvwxyz" #"{\"name\":\"Noyel\"}" httpCode, httpRes = esp01.doHttpPost("http://www.httpbin.org/","/post","RPi-Pico", "application/json",post_json,port=80) print("------------- www.httpbin.org/post Post Operation Result -----------------------") print("HTTP Code:",httpCode) print("HTTP Response:",httpRes) print("--------------------------------------------------------------------------------\r\n\r\n") #break |