标题: 电脑控制单片机控制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。
烧录的单片机程序大概是这样的:
  1. from pyb import UART
  2. from pyb import LED

  3. #等待ESP-01模块初始化,忽略启动时的内部信息
  4. pyb.delay(1000)

  5. ESP_UART = UART(4,115200,timeout=100)

  6. def sendToUart(msg):
  7.         ESP_UART.write(msg+'\r\n')

  8. CWMODE_CUR = 'AT+CWMODE_CUR=1'
  9. CWJAP_CUR = 'AT+CWJAP_CUR="TurnipSmart","turnip2016"'
  10. CIPSTART = 'AT+CIPSTART="TCP","192.168.1.116",80'
  11. CIPSEND = 'AT+CIPSEND=%s'
  12. msg = 'Hello,I am TPYBoard.'

  13. if __name__  == '__main__':
  14.         sendToUart('AT')
  15.         while True:
  16.                 if ESP_UART.any()  > 0:
  17.                         buf = ESP_UART.read().decode().replace('\r','').replace('\n','').replace(' ','')
  18.                         print(buf)
  19.                         if buf.find('busyp') > -1 or buf.find('ERROR') > -1:
  20.                                 # AT指令执行失败
  21.                                 # 结束程序排查原因
  22.                                 break
  23.                         elif buf.find('ATOK') > -1:
  24.                                 # 说明AT指令执行成功
  25.                                 # 成功进入AT指令模式
  26.                                 # 设置WIFI模式为sta模块
  27.                                 sendToUart(CWMODE_CUR)
  28.                         elif buf.find(CWMODE_CUR) > -1:
  29.                                 # 设置sta模式成功,连接AP
  30.                                 sendToUart(CWJAP_CUR)
  31.                                 LED(1).on()
  32.                         elif buf.find('WIFIGOTIP') > -1:
  33.                                 # 连接AP成功
  34.                                 # 开始连接TCP Server
  35.                                 pyb.delay(150)
  36.                                 sendToUart(CIPSTART)
  37.                                 LED(2).on()
  38.                         elif buf.find(CIPSTART) > -1:
  39.                                 # 连接TCP Server成功,发送数据
  40.                                 CIPSEND = CIPSEND % str(len(msg))
  41.                                 sendToUart(CIPSEND)
  42.                                 LED(3).on()
  43.                         elif buf.find('>') > -1:
  44.                                 # 发送数据
  45.                                 sendToUart(msg)
  46.                                 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