# -*- coding: utf-8 -*- import time import hashlib import threading from serial import Serial import serial.tools.list_ports import time #查找端口函數 def findPort(): ports = serial.tools.list_ports.comports() for each in ports: if 'Android' in each: com_android = each.split(' - ')[0] return com_android #發送AT指令函數 def at_send_cimi(serial): try: at_bsn = 'AT+CIMI' # 具體命令就不給出了。 serial.write(at_bsn.encode('utf-8') + b'\r') # 向端口發送指令必須二進制格式;末尾添加\r\n表示發送。 print('AT+CIMI SEND SUCCESS!') except Exception as e: print(e) def at_send_cmiot(serial): try: #at_bsn = 'AT+QICSGP=1,1,"CTNET","","",1' # 具體命令就不給出了。 #中國移動 at_bsn = 'AT+QICSGP=1,1,"CMIOT","","",1' # 具體命令就不給出了。 serial.write(at_bsn.encode('utf-8') + b'\r') # 向端口發送指令必須二進制格式;末尾添加\r\n表示發送。 print('AT+QICSGP SEND SUCCESS!') except Exception as e: print(e) def at_send_qiact(serial): try: at_bsn = 'AT+QIACT=1' # 具體命令就不給出了。 serial.write(at_bsn.encode('utf-8') + b'\r') # 向端口發送指令必須二進制格式;末尾添加\r\n表示發送。 print('AT+QIACT SEND SUCCESS!') except Exception as e: print(e) def at_send_tcprequest(serial): try: at_bsn = 'AT+QIOPEN=1,0,"TCP","47.103.67.239",8080,0,2' # 具體命令就不給出了。 serial.write(at_bsn.encode('utf-8') + b'\r') # 向端口發送指令必須二進制格式;末尾添加\r\n表示發送。 print('AT+tcp request SEND SUCCESS!') except Exception as e: print(e) def socket_send_data(serial): try: at_bsn = 'hello world test success' # 具體命令就不給出了。 serial.write(at_bsn.encode('utf-8') + b'\r') # 向端口發送指令必須二進制格式;末尾添加\r\n表示發送。 print('socket SEND data SUCCESS!') except Exception as e: print(e) def recv_msg(serial): # 接收消息(任務線程) global g_tcp_state while True: data = serial.read(128) if len(data) > 6: print("data2:",data[2]) if data[2] == 0x52 and data[3] == 0x44: print("ready cmd in") at_send_cimi(serial) time.sleep(0.1) #at_send_cmiot(serial) #osdelay(1000) #time.sleep(0.1) #at_send_qiact(serial) if len(data) > 30: if data[29] == 0x4f and data[30] == 0x4b: print("recv sim card success and send cmiot register") at_send_cmiot(serial) #at_send_qiact(serial) #time.sleep(0.1) #at_send_tcprequest(serial) if len(data) > 35: if data[32] == 0x4f and data[33] == 0x4b: print("recv cmiot register success and send qiat cmd") at_send_qiact(serial) if len(data) == 17: print("data13:",data[13]) if data[13] == 0x4f and data[14] == 0x4b: print("recv qiact ack success and send tcp connect") at_send_tcprequest(serial) if len(data) == 66: print("data61:",data[61]) print("data62:",data[62]) if data[61] == 0x73 and data[62] == 0x73: g_tcp_state = True print("tcp socket connected success") if g_tcp_state == True: socket_send_data(serial) time.sleep(0.1) #主程序 if __name__ == '__main__': g_tcp_state = False serial = serial.Serial('/dev/ttyUSB0', 115200, timeout=0.5) #/dev/ttyUSB0 if serial.isOpen() : print("open success") else : print("open failed") threading.Thread(target=recv_msg, args=(serial,)).start()
基於python的cat1模塊的AT指令串口通信解析
一 前記
使用cat1模塊做產品的過程中,遇到了不少問題。其中很重要的一個就是怎麼測試單個模塊的好壞。這裏筆者專門寫了一個工具,來測試cat1模塊的是否好用,這裏做一個分享吧。
二 源碼解析
這個是一個完全可以工作的程序,只需要改成你的模塊的即可;
三 總結
at指令在c代碼中和python中是不同的,c代碼中要針對逗號要添加隔離符,python中是不需要的。
還要就是回撤和換行,每個產品都不同,這個添加的時候要具體情況具體分析了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.