本意:想通過單片機控制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()
復制代碼
希望大佬描述一下整個流程,不需要管代碼。謝謝。
|