12. [Micropython]TPYBoard v102 结合ESP8266模块实现HTTP请求实例¶
版权声明:翻译整理属于TPYBoard,转载时请以超链接形式标明文章原始出处和作者信息及本声明
12.1. 实验目的¶
- 学习ESP8266模块(ESP-01)的使用。
- 进一步学习TPYBoardv10x中UART模块的使用。
- 结合ESP-01模块完成HTTP请求实例。
12.2. 所需元器件¶
- ESP-01 WIFI模块 1个
- TPYBoard v102板子 1块
- USB转TTL 1个
- micro USB数据线 1条
- 杜邦线 若干
上一篇文档《TPYBoard v10x 结合ESP8266模块实现TCP通信》中,实现了局域网中的TCP通信。本次,我们来实现简单的HTTP请求。
12.3. 1、硬件连接¶
ESP-01模块的引脚图:
ESP-01模块 | TPYBoard v102 |
---|---|
VCC | 3V3 |
GND | GND |
CH_PD | 3V3 |
GPIO 0 | 悬空 |
GPIO 2 | 悬空 |
TXD | X2(UART 4 ) |
RXD | X1(UART 4 ) |
12.4. 2、程序编写¶
ESP8266使用AT指令开发示例:点击进入
打开上面的AT指令开发示例,查看【二. HTTP通信示例】。根据上面的示例,完成HTTP请求的实验。
12.4.1. 2.1 发送GET请求¶
程序如下:
from pyb import UART
from pyb import LED
#等待ESP-01模块初始化,忽略启动时的内部信息
pyb.delay(1000)
ESP_UART = UART(4,115200,timeout=100)
def sendToUart(msg):
ESP_UART.write(msg+'\r\n')
CWMODE_CUR = 'AT+CWMODE_CUR=1'
CWJAP_CUR = 'AT+CWJAP_CUR="TurnipSmart","turnip2016"'
CIPSTART = 'AT+CIPSTART="TCP","183.230.40.33",80'
CIPSEND = 'AT+CIPSEND=%s'
post = """POST /devices/5835707/datapoints HTTP/1.1
api-key: xUrvOCDB=iRuS5noq9FsKrvoW=s=
Host:api.heclouds.com
Content-Length:60\r\n
{"datastreams":[{"id":"switch","datapoints":[{"value":1}]}]}
"""
if __name__ == '__main__':
#退出透传
ESP_UART.write('+++')
pyb.delay(500)
sendToUart('AT')
isConn = 0
while True:
if ESP_UART.any() > 0:
buf = ESP_UART.read().decode().replace('\r','').replace('\n','').replace(' ','')
print(buf)
pyb.delay(200)
if buf.find('busyp') > -1 or buf.find('ERROR') > -1:
# AT指令执行失败
# 结束程序排查原因
break
elif buf.find('ATOK') > -1:
# 说明AT指令执行成功
#if 'ATOK' in buf:
# 成功进入AT指令模式
# 设置WIFI模式
sendToUart(CWMODE_CUR)
elif buf.find(CWMODE_CUR) > -1:
# 设置sta模式成功,连接AP
sendToUart(CWJAP_CUR)
LED(1).on()
elif buf.find(CWJAP_CUR) > -1:
isConn = 1
elif buf.find('OK') > -1 and isConn:
# 连接AP成功
# 连接TCP Server
sendToUart(CIPSTART)
LED(2).on()
isConn = 0
elif buf.find('WIFIGOTIP') > -1:
# 连接AP成功
# 连接TCP Server
sendToUart(CIPSTART)
LED(2).on()
elif buf.find('CONNECTOK') > -1:
# 连接TCP Server成功,发送数据
LED(3).on()
sendToUart('AT+CIPMODE=1')#透传
elif buf.find('AT+CIPMODE=1') > -1:
sendToUart('AT+CIPSEND')#启动传输
elif buf.find('>') > -1:
# 发送数据
sendToUart(get)
LED(4).on()
elif buf.find('HTTP') > -1:
#退出透传
ESP_UART.write('+++')
pyb.delay(500)
break
实现效果: