您尚未登录。

楼主 #1 2018-12-26 15:14:34

msr06rr
会员
所在地: 苏州
注册时间: 2018-01-11
已发帖子: 179
积分: 169.5

ESP32+SIM800L实现MQTT功能

断断续续搞了好一阵子终于可以在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

离线

#2 2018-12-26 15:26:33

basicdev
会员
注册时间: 2017-10-02
已发帖子: 159
积分: 159

Re: ESP32+SIM800L实现MQTT功能

这种SIM800L模块是不是有一个PPP模式,还有一个AT模式?

默认上电是AT模式吧,如何进入 PPP 模式?

用PPP模式除了上网,还可以打电话和发短信吗?

离线

楼主 #3 2018-12-26 15:56:12

msr06rr
会员
所在地: 苏州
注册时间: 2018-01-11
已发帖子: 179
积分: 169.5

Re: ESP32+SIM800L实现MQTT功能

basicdev 说:

这种SIM800L模块是不是有一个PPP模式,还有一个AT模式?

默认上电是AT模式吧,如何进入 PPP 模式?

用PPP模式除了上网,还可以打电话和发短信吗?

是有一个PPP模式,一个命令模式,还有另外一个数据模式,上电默认AT模式,进入PPP模式需要拨号:ATD*99#
在PPP模式下就不能发短信打电话了,需要退出PPP模式才可以做到。不过也有别的技术可以同时,好像是CMUX协议?没研究过

离线

#4 2018-12-26 16:45:27

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: ESP32+SIM800L实现MQTT功能

还有这种操作,感谢楼主分享!





在线

#5 2019-12-11 13:57:32

zhangxq
会员
注册时间: 2019-12-11
已发帖子: 1
积分: 1

Re: ESP32+SIM800L实现MQTT功能

你好,我最近在做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')

离线

#6 2022-10-31 18:08:39

future
会员
注册时间: 2021-11-28
已发帖子: 43
积分: 20

Re: ESP32+SIM800L实现MQTT功能

老哥,你这个有固件可以分享一下嘛,我都获取不到IP直接旧断开PPP服务了,是卡的原因嘛,我直接用的自己的电信4G卡,也用同事的联通和移动的都试过了,还是无法获取IP,rssi也都是0

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn