本意:想通过单片机控制GSM模块 通过AT指令向服务器发送数据。
但是我看到网上很多通过上位机软件直接发送AT指令,然后可以收到回显。想知道这个流程。
问题1:这个流程是否是电脑通过USB转串口线连到了单片机,然后单片机通过另外一个串口连接到一个GSM模块,那是不是用到了两个串口?
问题2:如果想用上位机发送AT指令通过单片机连接的GSM模块发送AT指令并收到回显,这个过程是怎样的呢?是否是上位机通过与单片机相连接的串口先把AT指令发到单片机,然后单片机再通过另外一个串口向GSM模块发送AT命令呢。但是这样的话,想不到单片机里的程序应该是什么。
问题3:用电脑直接烧录程序,然后单片机通过程序控制GSM发送指令,这个时候电脑的usb连接线相当于只提供了电源,这个过程是我能理解的 。
但是这样我无法看到指令的返回值,如果想看到返回值是不是又回到了问题2。
烧录的单片机程序大概是这样的:- 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","192.168.1.116",80'
- CIPSEND = 'AT+CIPSEND=%s'
- msg = 'Hello,I am TPYBoard.'
- if __name__ == '__main__':
- sendToUart('AT')
- while True:
- if ESP_UART.any() > 0:
- buf = ESP_UART.read().decode().replace('\r','').replace('\n','').replace(' ','')
- print(buf)
- if buf.find('busyp') > -1 or buf.find('ERROR') > -1:
- # AT指令执行失败
- # 结束程序排查原因
- break
- elif buf.find('ATOK') > -1:
- # 说明AT指令执行成功
- # 成功进入AT指令模式
- # 设置WIFI模式为sta模块
- sendToUart(CWMODE_CUR)
- elif buf.find(CWMODE_CUR) > -1:
- # 设置sta模式成功,连接AP
- sendToUart(CWJAP_CUR)
- LED(1).on()
- elif buf.find('WIFIGOTIP') > -1:
- # 连接AP成功
- # 开始连接TCP Server
- pyb.delay(150)
- sendToUart(CIPSTART)
- LED(2).on()
- elif buf.find(CIPSTART) > -1:
- # 连接TCP Server成功,发送数据
- CIPSEND = CIPSEND % str(len(msg))
- sendToUart(CIPSEND)
- LED(3).on()
- elif buf.find('>') > -1:
- # 发送数据
- sendToUart(msg)
- LED(4).on()
复制代码
希望大佬描述一下整个流程,不需要管代码。谢谢。
|