Модуль ESP-01 (ESP8266-01 ) является достаточно функциональным и при этом одним из самых дешевых Wi-Fi модулей. В данной статье мы рассмотрим подключение Wi-Fi модуля ESP8266-01 к плате Raspberry Pi Pico и его программирование с помощью языка Micropython и библиотеки ESP8266.
Модуль ESP8266-01 поставляется с собственной прошивкой (программным обеспечением), управлять им можно по последовательному порту (UART), передавая ему AT команды. С помощью языка программирования Micropython мы можем сравнительно просто подключить модуль ESP8266 к плате Raspberry Pi Pico и выполнять операции вида http get/post. Более подробно про работу с данным модулем вы можете прочитать в статье про его подключение к плате Arduino.
Необходимые компоненты
- Плата Raspberry Pi Pico (купить на AliExpress).
- Модуль ESP8266-01 (купить на AliExpress).
- Резистор 1 или 10 кОм (опционально, для подключения между контактом 3.3v платы и контактом EN модуля ESP8266).
- Макетная плата.
- Соединительные провода.
Схема проекта
Схема подключения Wi-Fi модуля ESP8266-01 к плате Raspberry Pi Pico представлена на следующем рисунке.
На представленной схеме провод красного цвета соединяет контакт VCC модуля ESP-01 с контактом 3.3V (контакт № 36) платы Raspberry Pi Pico. Провод коричневого цвета подключает контакт CH_EN (Channel Enable – задействование канала) модуля ESP-01 к контакту 3.3V платы. Контакт передачи модуля ESP-01 подключен к контакту приема канала UART0 (контакт № 2) платы Raspberry Pi Pico с помощью провода желтого цвета на схеме. Контакт приема модуля ESP-01 подключен к контакту передачи канала UART0 (контакт № 1) платы с помощью провода оранжевого цвета. Соединение проводов земли (ground) модуля и платы показано проводами черного цвета.
Объяснение программы для Raspberry Pi Pico
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
Прежде чем начинать работу над программой для проекта скачайте с репозитория GitHub каталог обучающих программ для Raspberry Pi Pico либо же вы непосредственно можете скачать библиотеку Raspberry Pi Pico MicroPython ESP8266 library для использования операций 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 чтобы получить ответ на свой запрос и другие данные в формате 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() для отключения эхо (Echo) в AT командах и затем функцию 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.
Чтобы завершить операции Get/Post нам необходимо вызвать функции esp01.doHttpGet() и esp01.doHttpPost(). В функцию esp01.doHttpGet() нам необходимо передать URL адрес хоста, в качестве него мы будем использовать адрес User-Agent[Optional, default “RPi-Pico”]. В качестве номера порта (port number) мы будем использовать [optional, default “80”].
В функцию esp01.doHttpPost() нам также необходимо передать URL адрес хоста, в качестве него мы будем использовать адрес User-Agent[Optional, default “RPi-Pico”], тип контента у нас будет [ex. application/json, text/plain etc], а номер порта [optional, default “80”].
После завершения каждой операции Get/Post функция возвращает HTTP код ошибки (Error Code) в ответе и мы печатаем этот код ошибки.
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 IDE последовательно выводит на экран все выводимые нами из программы данные.
Исходный код программы на 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 (устанавливаем режим WiFi) ''' 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 ''' 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 |