找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1778|回复: 1
打印 上一主题 下一主题
收起左侧

电脑控制单片机控制GSM模块发送AT指令是怎么工作的?

[复制链接]
跳转到指定楼层
楼主
ID:493416 发表于 2019-8-21 20:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本意:想通过单片机控制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()
复制代码


希望大佬描述一下整个流程,不需要管代码。谢谢。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:138097 发表于 2019-8-22 08:13 | 只看该作者
1.“网上很多通过上位机软件直接发送AT指令,然后可以收到回显”,这个一般是不用单片机,直接用电脑串口转TTL到你的GSM模块上,电脑直接和GSM通信的,一发一收。你用单片机这样做,那就要两个串口,一个收指令,一个发指令,多此一举。
2.对的,就是这样,单片机就是做串口的收发处理啊,你串口1中断接收数据,然后处理或者不处理,再通过串口2发送数据(串口2连接GSM)
3.额,你不会仿真吗?仿真看发送和接收的数据是什么样子的啊。。。或者通过串口打印出来。仿真最便捷啊。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表