4-WIFI&蓝牙(ESP32)转CAN或RS485总线&串口TTL模块-CSDK-设备作为TCP客户端,实现上位机TCP服务器和CAN之间的数据传输
<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ESP32_CAN" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>
说明
这节设备作为TCP客户端, 连接上位机TCP服务器, TCP服务器发送的数据通过CAN总线输出; 设备从CAN总线接收的数据发送到TCP服务器;
测试
1,打开这节的工程
这节是让设备连接路由器, 根据自己的需求配置模组连接的路由器 和 CAN总线波特率, 和 TCP服务器地址
2,连接上CAN总线设备
3,我这边使用调试助手创建个服务器
4,如果接收到数据会显示
一帧数据是12字节, 前面4字节是帧ID,后面8字节数数据
5,发送数据
前面四字节是帧ID,后面8字节是数据
这边使用CAN分析仪接收的数据
程序说明
1,TCP客户端接收到TCP服务器的数据就把数据通过CAN发送出去
length = len; count=0; while (length!=0 && length%12==0) //粘包的时候处理粘包 { //帧ID uint32_t canId=0; canId = tcpClient1Recv[0+count]; canId= canId<<8; canId = canId + tcpClient1Recv[1+count]; canId = canId<<8; canId = canId + tcpClient1Recv[2+count]; canId = canId<<8; canId = canId + tcpClient1Recv[3+count]; /*发送CAN消息*/ twai_message_t* twai_message = (twai_message_t*)malloc(sizeof(twai_message_t)); if(twai_message != NULL ) { memset(twai_message, 0, sizeof(twai_message_t)); /*数据*/ memcpy(twai_message->data, &tcpClient1Recv[4+count], 8);//拷贝数据 twai_message->data_length_code = 8;//数据个数 twai_message->extd=0;//0-标准帧; 1-扩展帧 if (canId>0x7FF)//扩展帧 { twai_message->extd=1; } twai_message->identifier = canId;//帧ID twai_message->rtr = 0;//0-数据帧; 1-远程帧 /*把消息发送到消息队列*/ if (xQueueSend(QueueHandleCanTransmit, &twai_message, 5/portTICK_PERIOD_MS) != pdPASS) { free(twai_message); } } count=count+12; length = length -12; }
2,通过CAN接收的数据发送给TCP服务器
//接收的CAN报文发送到TCP服务器 tcpClientTransmit_t* tcpClientTransmit = (tcpClientTransmit_t*)malloc(sizeof(tcpClientTransmit_t)); if(tcpClientTransmit != NULL ) { uint8_t *p_data = (uint8_t *) malloc(12);//待发送数据的个数 p_data[0] = (twai_message.identifier>>24)&0xff; p_data[1] = (twai_message.identifier>>16)&0xff; p_data[2] = (twai_message.identifier>>8)&0xff; p_data[3] = (twai_message.identifier>>0)&0xff; memcpy(&p_data[4], twai_message.data, 8);//取8字节CAN数据 tcpClientTransmit->p_data = p_data; tcpClientTransmit->data_len = 12;//发送数据的个数 tcpClientTransmit->tcpClient = &tcpClient[0];//使用哪个客户端发送 /*把消息发送到消息队列*/ if (xQueueSend(QueueHandleTcpClientTransmit, &tcpClientTransmit, pdMS_TO_TICKS(10)) != pdPASS) { free(tcpClientTransmit); free(p_data); } }
3,用户可以以1ms高频率发送CAN数据
下面是以1ms频率发送数据, 发送了5分钟,十分稳定
.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
2022-04-13 401-STM32+ESP8266+Air302基本控制篇(阿里云物联网平台)-微信小程序使用APUConfig配网绑定ESP8266并通过阿里云物联网平台实现远程通信控制
2021-04-13 201-STM32+Air724UG基本控制篇(阿里云物联网平台)-设备使用一机一密方式连接云平台,并使用物模型Topic上报温湿度数据(STM32+Air724)
2021-04-13 300-STM32+Air724UG基本控制篇(阿里云物联网平台)-设置规则引擎(云产品流转),让设备之间实现通信
2021-04-13 200-STM32+Air724UG基本控制篇(阿里云物联网平台)-关于阿里云物联网平台物模型Topic
2021-04-13 100-STM32+Air724UG基本控制篇(阿里云物联网平台)-关于阿里云物联网平台自定义Topic
2021-04-13 100-STM32+Air724UG基本控制篇(阿里云物联网平台)-关于阿里云物联网平台自定义Topic