Cheney_Chen
Cheney_Chen
This guy hasn't written anything yet

注册于 4 years ago

回答
2
文章
0
关注者
4

    本帖最后由 Cheney_Chen 于 2018-8-27 15:06 编辑


建议楼主更新RT-Thread 源码,最新的 AT 组件包中添加了对协议簇操作相关函数定义(包括查询,注册,注销等),可以很方便的实现楼主的需求


顶一下,最新版本 webclient 试用:lol

  1. AT Socket 功能开启在 AT 组件下的 Provide similar BSD Socket API by AT 选项,具体配置流程可以参考官网 AT Client 应用笔记,

    2.详细查看完应用笔记,确定配置正确,设备能够连接网络 at_ping 能够成功运行之后,接着再继续下面 MQTT 连接操作

    3.上面显示 MQTT 连接的问题是域名解析不正确导致的,你可以先使用默认的网站连接 MQTT 试试,确定域名解析是否有问题,如果成功再改为自己的网站测试。

是否可以在有线或无线网络断开的时候,注销 SAL 中注册的 lwIP 协议簇,MQTT 重连的时候就能使用 AT Socket 功能?

首先,通楼主上述描述可以知道,楼主使用的是webclient V1.0.0版本,不知道楼主是否注意 webclient 有最新版本更新,最新版本在多个方面都做了优化处理,对上述部分问题也做了处理,因为对 1.0.0 的接口和实现改动比较大,所以可能还没有普及使用。

然后是提到的几个问题:
1. webclient_open_tls 函数定义是静态内部函数,不对外开放,所以不会在 webclient.h 给出;
2. strdup 函数问题已经在新版本中统一修改,webclient 新版本对函数定义、日志、注释等方面都有统一修改;
3. mbestls 这个问题,看情况是因为在 mbedtls 中域名解析的时候出问题了,这可能和 LWIP 中一个配置有关,可以尝试修改搜索 LWIP 中的 `MEMP_NUM_NETDB` 定义,将默认的 1 改为 2-4 再试着运行例程,这也是历史遗留问题。
4.其他问题未知,需要楼主进一步调试确定问题。

基本的函数调用逻辑:
send() -> at_send() -> esp8266_socket_send() -> 发送 AT命令

esp8266_socket_send 函数是 AT Socket 功能中 at_send 函数关于 ESP8266 设备的实现,实际上层调用的函数是 at_send 函数,这函数是标准的 BSD Socket API,调用方式和 send 函数一样。也可以开启 SAL 组件,直接抽象 at_send 函数为标准send 函数。

这打印是 AT 设备网络初始化的时候的打印日志,具体可查看 at_socket_esp8266.c 文件中的 esp8266_net_init() 网络初始化函数。

是不是串口底层驱动问题,我原来也遇到过这个问题,然后打开RAW分析发现 HTTP 收到的数据有问题,最后把串口的DMA模式关闭,串口接收到的数据就正常了,你可以试试关闭串口的DMA功能看看现象

AT Client 的移植函数需要自己实现,已经在应用笔记中给出移植示例,也可以直接 开启AT Socket 功能,选择对应的 at_device 软件包完成移植

这个问题已经在最新版本组件包中修复,可以更新RT-Thread源码再试试

AT Client 移植函数没有实现(红色错误),AT Socket 功能都没有开启,当然不能使用at_ping 命令,用的是什么 AT 模块,如果是ESP8266 可以再好好看一下应用笔记

文件系统中最大支持的FD数量开大,改为16
1.jpg

可以通过判断协议簇类型来判断使用的协议栈或网络实现类型,socket()函数第一个参数为协议簇类型。

回到
顶部

发布
问题

投诉
建议