参考https://jingyan.baidu.com/article/e52e36154ae4f740c60c5106.html
现在大多的单片机使用LwIP协议来实现互联网功能,但是在刚刚学习时发现有个问题就是,LwIP协议用作服务器端时可以成功执行建立Socket,绑定端口号以及启动侦听等功能。但是用作客户端时,无法连接到指定的服务器端。其实问题主要出在时序上,由于LwIP初始化需要一定的时间而且这个过程与主程序是并列进行的。
LwIP协议初始化主要完成设备 IP的指定(如果连接到路由器以及运行DHCP服务,还要等待路由器为设备分配 IP)、网关等认证。
由于单片机做服务器端的初始化与等待连接的客户端无关,所以可以在LwIP未初始化完成时便可以启动侦听服务,但也要等LwIP初始化完成才可以接收客户端连接。
但单片机做客户端时,需要向服务器端发起连接,所以在LwIP协议没有初始化完成时是不可能发起连接的。所以解决问题要在LwIP初始化完成后再运行客户端初始化和发起连接。
使用freertos + LWIP+EC20实现mqtt和http clinet功能。
1、如何实现EC20网络ppp功能,
请参考代码https://github.com/loboris/ESP32-PPPOS-EXAMPLE
2、如何实现mqtt功能,请参考lwip中的mqtt_test,使用mqttbox测试验证。需要一台服务器
3、如何实现http client功能,
1)此功能比较坑的是建立网络后,需要一段时间延迟。
2)在1)基础上基本能够connect上服务器,可以进行写入,但是读取会堵塞。
参考lwip\contrib\apps\socket_examples代码中socket_examples.c文档中sockex_testrecv(void *arg)函数。
需要设置lwip_setsockopt等。