断断续续搞了好一阵子终于可以在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模式除了上网,还可以打电话和发短信吗?
是有一个PPP模式,一个命令模式,还有另外一个数据模式,上电默认AT模式,进入PPP模式需要拨号:ATD*99#
在PPP模式下就不能发短信打电话了,需要退出PPP模式才可以做到。不过也有别的技术可以同时,好像是CMUX协议?没研究过
离线