前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2-WIFI&蓝牙(ESP32)转CAN或RS485总线&串口TTL模块-CSDK--二次开发工程模板介绍(wifi配置;串口;CAN总线,高并发TCP服务器,多路TCP客户端)

2-WIFI&蓝牙(ESP32)转CAN或RS485总线&串口TTL模块-CSDK--二次开发工程模板介绍(wifi配置;串口;CAN总线,高并发TCP服务器,多路TCP客户端)

作者头像
杨奉武
发布2024-04-13 08:14:26
930
发布2024-04-13 08:14:26
举报
文章被收录于专栏:知识分享知识分享

把工程拷贝进自己的IDF目录

1,把工程放到和hello_world同一级目录,然后解压

2,使用vscode打开

第一次使用,先点击这个清理下工程

然后再点击编译 

提示: 第一次编译时间有点长, 编译完这一次后面再编译就快了

3,所有的默认配置都在 parameConfig

实际上所有的配置都可以做动态配置, 便于以后使用上位机等进行配置

在初始化的时候先加载默认配置

后面接着会从存储里面再重新配置, 当前只是写了个简单的测试, 随着用户的需求将会渐渐增加对应的动态配置

测试串口

1,咱们就使用下面两个口做测试

IO21 和 IO22是通用输入输出IO口,既可以做开关量输入(最高支持24V), 也可以做uart,IIC等

2,把程序下载到设备

注意:因为封装的功能都在全部运行,所以功耗大,测试时最好外接电源适配器给设备供电;

配置的IO21为TX; IO22为RX 波特率设置的 9600

程序上是接收到什么就返回什么; 提供了两种发送数据的形式,推荐使用下面的任务加队列方式(如果用户想使用 xQueueCreate, 可参考CAN总线发送数据例子)

3,这边使用串口模块连接设备进行测试,因为摒弃了乐鑫的例子,自己直接写的底层处理,所以效率非常高

这边先使用串口调试助手发送1字节数据进行测试,看下收发延迟, 时间相差5ms

实际上还需要去掉一字节数据的实际传输时间; 以9600波特率发送完一个字节数据需要1.04ms左右, 然后再回来需要1.04ms左右, 其实,延迟也就不到3ms

下面是使用逻辑分析仪抓取的信号, 实际延迟为2.82ms左右, 在跑操作系统的状态下这已经是顶峰了,毕竟操作系统需要任务切换

然后再测试大数据量, 这边使用串口调试助手每隔1ms发送100字节数据进行测试

这边使用串口调试助手每隔1ms发送1000字节数据进行测试, 注意由于是9600波特率, 所以调试助手发送完1000字节也需要1S多,所以才会看着卡

这里可以修改串口缓存大小

4,接收数据

提取数据的时候后面的len可以提取任意个, 这样子判断处理粘包和分包就非常方便了

测试串口RS485(无论用户使用的是否是RS485设备,也建议看下这个)

1,当前设备CAN和RS485共用引脚,测试时把CAN的使能标志设置为 0

2,程序也是接收什么就返回什么

2,这边也是连接调试模块进行测试

3,测试的时候如果定时发送间隔太短会发现回复的有乱码,其实是因为由于程序处理效率高

只要检测到缓存里面有接收的数据了就往外发了, 485那个线上还在来数据呢, 这边就往外发了,所以485线的数据就乱了

为了解决这个问题我在底层做了处理, 用户可以在判断上加上 && NotifyValue<=1   (NotifyValue<=1的时候意味着串口空闲中断来了,底层接收完一帧数据了)

空闲检测时间也是可以更改的, 这个时间是传输多少个11bit位的时间

现在波特率是9600, 也就是 1/9600≈0.1ms  传输 1bit,  下面空闲写的2, 也就是UART线超过 2*0.1*11≈2.2 ms  都没有接收数据了,就认为接收到了一帧数据,产生空闲中断

当然测试的时候时间也不能太短, 毕竟把数据传过去以后,设备接收然后还有数据返回时间

假设下面的传输10字节数据, 发送出去大概需要 11ms, 传过来需要11ms 所以无论如何都先固定有 22ms 传输时间

程序上处理数据只需要2.2+2.8=  5ms  (空闲检测需要 2.2ms, 系统处理 2.8ms左右)

整个数据来回理想状态传输完需要 27ms左右 , 如果小于27ms定时发送10字节数据,那肯定不行, 就会出现在发送的时候同时在接收,就会出现乱码 ;

当然理想状态很难,毕竟跑系统, 所以再加个5,6ms;

提示:实际应用中其实各个上位机(modbus等都知道这个事情),会自动的增加本身数据传输时间来确保数据传输的稳定性;这边只是了解就可以;

测试CAN

1,当前设备CAN和RS485共用引脚,测试时把RS485的使能标志设置为 0  CAN使能设置为 1

可以根据自己的CAN设备更改波特率, 现在设置的是250K

2,默认提供了一个循环发送CAN数据例子

3,这边连接了CAN测试仪进行测试

4,CAN接收数据的地方

测试WiFi

1,用户可以根据自己的需求进行配置

2,如果需要获取连接路由器状态, 连接的路由器信息或者自身分配的IP地址等信息

提示

默认模组最大只能建立10个socket(tcp server + tcp client + udp), 在堆足够的情况下可根据自己的情况增加;

esp_get_free_heap_size() 可以获取实时的堆剩余大小(字节)

测试设备作为TCP 服务器

1,当前可以测试设备开两路TCP 服务器, 每路服务器可以支持8路客户端

注意:受上面10路socket的限制, 两个TCP服务器已经占了两个socket了; 还剩下8个socket分配到两个TCP服务器

第一路监听的端口号是 8888      第二路监听的端口号是 8889

2,如果需要多路则使能, 注意需要设置不同的监听端口

注意注意: 当前只写了两路服务器的对应的回调函数,如果需要多路则需要再添加

这里有例子,  例子上是接收到数据就返回数据

3,测试方式有两种

一个是咱电脑连接设备的热点, 设备自身默认的IP地址是:192.168.4.1

另一种方式是让设备和咱电脑同在一个路由器下,设备的IP地址呢就由路由器分配了, 有经验的用户也可以在下面设置下设备的静态IP;

我这边就直接连接设备的热点进行测试, 如果客户是连接路由器进行局域网测试,下面也会说明连接路由器的方式

4,把程序下载到设备,然后打开串口监控助手

如果用户使用路由器测试的话,这里会打印设备的IP地址

5,打开网络调试助手

我这边是连接的设备的热点,所以IP地址填写的是设备自身的IP

如果用户使用路由器测试的话,填写上面设备连接路由器后分配的IP

6,可以测试下轮训1ms发送2000~3000字节的数据,来验证设备的处理速度

7,多创建几个客户端; 每个客户端都轮训1ms发送2000~3000字节的数据,来验证设备的高并发

测试设备作为TCP 客户端

1,为了便于测试,咱让设备连接路由器

2,我这边使用调试助手创建个服务器

3,服务器地址和端口号根据自己的改, 我这边电脑地址是 192.168.168.1, 然后服务器端口号是 6000

注意,如果需要打开10路, 受上面最大10路socket限制, 所以记得把上面的TCP服务器功能关掉, 可以先试着打开8路

4,编译下载以后,助手上会显示连接

然后就可以1ms进行测试

5,程序上也是接收到数据就返回

GPIO示例

1,主函数里写了个按键检测复位

.

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1,把工程放到和hello_world同一级目录,然后解压
  • 2,使用vscode打开
    • 第一次使用,先点击这个清理下工程
      • 然后再点击编译 
        • 提示: 第一次编译时间有点长, 编译完这一次后面再编译就快了
        • 3,所有的默认配置都在 parameConfig
          • 实际上所有的配置都可以做动态配置, 便于以后使用上位机等进行配置
            • 在初始化的时候先加载默认配置
              • 后面接着会从存储里面再重新配置, 当前只是写了个简单的测试, 随着用户的需求将会渐渐增加对应的动态配置
              • 测试串口
                • 1,咱们就使用下面两个口做测试
                  • IO21 和 IO22是通用输入输出IO口,既可以做开关量输入(最高支持24V), 也可以做uart,IIC等
                    • 2,把程序下载到设备
                      • 注意:因为封装的功能都在全部运行,所以功耗大,测试时最好外接电源适配器给设备供电;
                      • 配置的IO21为TX; IO22为RX 波特率设置的 9600
                      • 程序上是接收到什么就返回什么; 提供了两种发送数据的形式,推荐使用下面的任务加队列方式(如果用户想使用 xQueueCreate, 可参考CAN总线发送数据例子)
                    • 3,这边使用串口模块连接设备进行测试,因为摒弃了乐鑫的例子,自己直接写的底层处理,所以效率非常高
                      • 这边先使用串口调试助手发送1字节数据进行测试,看下收发延迟, 时间相差5ms
                      • 实际上还需要去掉一字节数据的实际传输时间; 以9600波特率发送完一个字节数据需要1.04ms左右, 然后再回来需要1.04ms左右, 其实,延迟也就不到3ms
                      • 下面是使用逻辑分析仪抓取的信号, 实际延迟为2.82ms左右, 在跑操作系统的状态下这已经是顶峰了,毕竟操作系统需要任务切换
                      • 然后再测试大数据量, 这边使用串口调试助手每隔1ms发送100字节数据进行测试
                      • 这边使用串口调试助手每隔1ms发送1000字节数据进行测试, 注意由于是9600波特率, 所以调试助手发送完1000字节也需要1S多,所以才会看着卡
                      • 这里可以修改串口缓存大小
                    • 4,接收数据
                      • 提取数据的时候后面的len可以提取任意个, 这样子判断处理粘包和分包就非常方便了
                  • 测试串口RS485(无论用户使用的是否是RS485设备,也建议看下这个)
                    • 1,当前设备CAN和RS485共用引脚,测试时把CAN的使能标志设置为 0
                      • 2,程序也是接收什么就返回什么
                        • 2,这边也是连接调试模块进行测试
                          • 3,测试的时候如果定时发送间隔太短会发现回复的有乱码,其实是因为由于程序处理效率高
                            • 只要检测到缓存里面有接收的数据了就往外发了, 485那个线上还在来数据呢, 这边就往外发了,所以485线的数据就乱了
                              • 为了解决这个问题我在底层做了处理, 用户可以在判断上加上 && NotifyValue<=1   (NotifyValue<=1的时候意味着串口空闲中断来了,底层接收完一帧数据了)
                              • 空闲检测时间也是可以更改的, 这个时间是传输多少个11bit位的时间
                              • 现在波特率是9600, 也就是 1/9600≈0.1ms  传输 1bit,  下面空闲写的2, 也就是UART线超过 2*0.1*11≈2.2 ms  都没有接收数据了,就认为接收到了一帧数据,产生空闲中断
                              • 当然测试的时候时间也不能太短, 毕竟把数据传过去以后,设备接收然后还有数据返回时间
                              • 假设下面的传输10字节数据, 发送出去大概需要 11ms, 传过来需要11ms 所以无论如何都先固定有 22ms 传输时间
                              • 程序上处理数据只需要2.2+2.8=  5ms  (空闲检测需要 2.2ms, 系统处理 2.8ms左右)
                              • 整个数据来回理想状态传输完需要 27ms左右 , 如果小于27ms定时发送10字节数据,那肯定不行, 就会出现在发送的时候同时在接收,就会出现乱码 ;
                              • 当然理想状态很难,毕竟跑系统, 所以再加个5,6ms;
                              • 提示:实际应用中其实各个上位机(modbus等都知道这个事情),会自动的增加本身数据传输时间来确保数据传输的稳定性;这边只是了解就可以;
                          • 测试CAN
                            • 1,当前设备CAN和RS485共用引脚,测试时把RS485的使能标志设置为 0  CAN使能设置为 1
                              • 可以根据自己的CAN设备更改波特率, 现在设置的是250K
                            • 2,默认提供了一个循环发送CAN数据例子
                              • 3,这边连接了CAN测试仪进行测试
                                • 4,CAN接收数据的地方
                                • 测试WiFi
                                  • 1,用户可以根据自己的需求进行配置
                                    • 2,如果需要获取连接路由器状态, 连接的路由器信息或者自身分配的IP地址等信息
                                    • 提示
                                      • 默认模组最大只能建立10个socket(tcp server + tcp client + udp), 在堆足够的情况下可根据自己的情况增加;
                                        • esp_get_free_heap_size() 可以获取实时的堆剩余大小(字节)
                                    • 测试设备作为TCP 服务器
                                      • 1,当前可以测试设备开两路TCP 服务器, 每路服务器可以支持8路客户端
                                        • 注意:受上面10路socket的限制, 两个TCP服务器已经占了两个socket了; 还剩下8个socket分配到两个TCP服务器
                                        • 第一路监听的端口号是 8888      第二路监听的端口号是 8889
                                      • 2,如果需要多路则使能, 注意需要设置不同的监听端口
                                        • 注意注意: 当前只写了两路服务器的对应的回调函数,如果需要多路则需要再添加
                                        • 这里有例子,  例子上是接收到数据就返回数据
                                      • 3,测试方式有两种
                                        • 一个是咱电脑连接设备的热点, 设备自身默认的IP地址是:192.168.4.1
                                        • 另一种方式是让设备和咱电脑同在一个路由器下,设备的IP地址呢就由路由器分配了, 有经验的用户也可以在下面设置下设备的静态IP;
                                        • 我这边就直接连接设备的热点进行测试, 如果客户是连接路由器进行局域网测试,下面也会说明连接路由器的方式
                                      • 4,把程序下载到设备,然后打开串口监控助手
                                        • 如果用户使用路由器测试的话,这里会打印设备的IP地址
                                      • 5,打开网络调试助手
                                        • 我这边是连接的设备的热点,所以IP地址填写的是设备自身的IP
                                        • 如果用户使用路由器测试的话,填写上面设备连接路由器后分配的IP
                                      • 6,可以测试下轮训1ms发送2000~3000字节的数据,来验证设备的处理速度
                                        • 7,多创建几个客户端; 每个客户端都轮训1ms发送2000~3000字节的数据,来验证设备的高并发
                                        • 测试设备作为TCP 客户端
                                          • 1,为了便于测试,咱让设备连接路由器
                                            • 2,我这边使用调试助手创建个服务器
                                              • 3,服务器地址和端口号根据自己的改, 我这边电脑地址是 192.168.168.1, 然后服务器端口号是 6000
                                                • 注意,如果需要打开10路, 受上面最大10路socket限制, 所以记得把上面的TCP服务器功能关掉, 可以先试着打开8路
                                              • 4,编译下载以后,助手上会显示连接
                                                • 然后就可以1ms进行测试
                                              • 5,程序上也是接收到数据就返回
                                              • GPIO示例
                                                • 1,主函数里写了个按键检测复位
                                                领券
                                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档