断断续续搞了好一阵子终于可以在SIM800L上跑MQTT了。
SIM800L本身是不支持MQTT的,但是模块本身很小巧很便宜,也很稳定。我就不喜欢什么功能都封装成AT指令,明明这些可以自己用软件来实现的,平白无故还增加了成本。
说说具体做法,其实在ESP32上已经很容易做到了,IDF本身有MQTT协议栈(基于lwip写的),并且lwip又支持PPP接口,所以我们只要让Modem正确进入PPP模式,然后调用mqtt的api即可。
话说回来,进入PPP模式还是要发AT指令的,好在也就那几条通用的指令。
I (1275) pppos_demo: Module: SIMCOM_SIM800L
I (1275) pppos_demo: Operator: "CHINA MOBILE"
I (1275) pppos_demo: IMEI: 865992039850864
I (1275) pppos_demo: IMSI: 460007454185220
I (1475) pppos_demo: rssi: 21, ber: 0
I (1675) pppos_demo: Battery voltage: 4652 mV
I (1875) pppos_demo: Modem PPP Started
I (2685) pppos_demo: Modem Connect to PPP Server
I (2685) pppos_demo: ~~~~~~~~~~~~~~
I (2685) pppos_demo: IP : 10.64.167.151
I (2685) pppos_demo: Netmask : 255.255.255.255
I (2695) pppos_demo: Gateway : 192.168.254.254
I (2695) pppos_demo: Name Server1: 211.136.112.50
I (2705) pppos_demo: Name Server2: 211.136.150.66
I (2705) pppos_demo: ~~~~~~~~~~~~~~
I (2715) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE
I (3815) MQTT_CLIENT: Sending MQTT CONNECT message, type: 1, id: 0000
I (4585) pppos_demo: MQTT_EVENT_CONNECTED
I (4595) pppos_demo: sent subscribe successful, msg_id=25635
I (8785) pppos_demo: MQTT_EVENT_SUBSCRIBED, msg_id=25635
I (8785) pppos_demo: sent publish successful, msg_id=0
I (10105) MQTT_CLIENT: deliver_publish, message_length_read=26, message_length=26
I (10105) pppos_demo: MQTT_EVENT_DATA
TOPIC=/topic/qos0
DATA=esp32-pppos
I (10155) pppos_demo: Modem PPP Stopped
I (13155) pppos_demo: Power down
离线
这种SIM800L模块是不是有一个PPP模式,还有一个AT模式?
默认上电是AT模式吧,如何进入 PPP 模式?
用PPP模式除了上网,还可以打电话和发短信吗?
离线
这种SIM800L模块是不是有一个PPP模式,还有一个AT模式?
默认上电是AT模式吧,如何进入 PPP 模式?
用PPP模式除了上网,还可以打电话和发短信吗?
是有一个PPP模式,一个命令模式,还有另外一个数据模式,上电默认AT模式,进入PPP模式需要拨号:ATD*99#
在PPP模式下就不能发短信打电话了,需要退出PPP模式才可以做到。不过也有别的技术可以同时,好像是CMUX协议?没研究过
离线
你好,我最近在做esp32 gprs联网时候遇到问题。我这里PPP成功了么,GSM.write('AT+CGDATA="PPP",1\r\n')返回connect,但是最后并没有拿到ip地址。
>>> from machine import UART
>>> import network
>>> GSM = UART(1, baudrate=115200, bits=8, rx=18, tx=19, stop=1, timeout=10)
I (176470) uart: ALREADY NULL
>>> GSM.write('AT\r\n')
4
>>> GSM.read()
b'AT\r\n\r\nOK\r\n'
>>> GSM.write('AT+CGATT=1\r\n')
12
>>> GSM.read()
b'AT+CGATT=1\r\n\r\nOK\r\n'
>>> GSM.write('AT+CGDCONT=1,"IP","uniwap"\r\n')
28
>>> GSM.read()
b'AT+CGDCONT=1,"IP","uniwap"\r\n\r\nOK\r\n'
>>> GSM.write('AT+CGACT=1,1\r\n')
14
>>> GSM.read()
b'AT+CGACT=1,1\r\n\r\nOK\r\n'
>>> GSM.write('AT+CGPADDR=1\r\n')
14
>>> GSM.read()
b'AT+CGPADDR=1\r\n\r\n+CGPADDR: 1,"10.212.2.204"\r\n\r\nOK\r\n'
>>> GSM.write('AT+CGDATA="PPP",1\r\n')
19
>>> GSM.read()
b'AT+CGDATA="PPP",1\r\n\r\nCONNECT\r\n'
>>> ppp=network.PPP(GSM)
>>> ppp.active(True)
True
>>> print(ppp.ifconfig())
('0.0.0.0', '0.0.0.0', '255.255.255.255', '0.0.0.0')
离线
老哥,你这个有固件可以分享一下嘛,我都获取不到IP直接旧断开PPP服务了,是卡的原因嘛,我直接用的自己的电信4G卡,也用同事的联通和移动的都试过了,还是无法获取IP,rssi也都是0
离线