标题:
电脑控制单片机控制GSM模块发送AT指令是怎么工作的?
[打印本页]
作者:
冷瞳啊
时间:
2019-8-21 20:29
标题:
电脑控制单片机控制GSM模块发送AT指令是怎么工作的?
本意:想通过单片机控制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()
复制代码
希望大佬描述一下整个流程,不需要管代码。谢谢。
作者:
whx.000
时间:
2019-8-22 08:13
1.“网上很多通过上位机软件直接发送AT指令,然后可以收到回显”,这个一般是不用单片机,直接用电脑串口转TTL到你的GSM模块上,电脑直接和GSM通信的,一发一收。你用单片机这样做,那就要两个串口,一个收指令,一个发指令,多此一举。
2.对的,就是这样,单片机就是做串口的收发处理啊,你串口1中断接收数据,然后处理或者不处理,再通过串口2发送数据(串口2连接GSM)
3.额,你不会仿真吗?仿真看发送和接收的数据是什么样子的啊。。。或者通过串口打印出来。仿真最便捷啊。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1