Comments (23)
此外我也测试了大佬写的ASCII模式,回传到串口的数据也没有动静。不过这次不是乱码, 应该是我接受modbus数据的时候哪里设置有问题。
from jy-me01.
这两天尝试用USB-ttl连接传感器,结果串口工具直接就弹出输出结果。
因此想过用arduino直接读取ttl数据,不过查了很多资料也没整明白23333
from jy-me01.
报错是CRC校验失败了,在第151行,原因可能有很多,你可以自行把cmd_hex_full
,rec_hex_main
这两个输出的内容打印出来看看有没有错误,前者是读取指令,8个字节,格式为 |ID|CMD|RegH|RegL|LenH|LenL|CRCH|CRCL|
后者是接收到的包含角度数据的帧,二者都是16进制值
JY-ME01/angle_sensor/angle_sensor.hpp
Line 185 in 890dc1f
from jy-me01.
按理说电脑连接传感器后,线接好,波特率设置对,模式设置为modbus,串口工具16进制下发送00 03 00 D4 00 01 C5 E3
传感器会回复 00 03 02 00 00 85 84
,像说明书里的这个图一样,你可以检查下回复是否正确
from jy-me01.
你也可以用arduino向传感器发送16进制指令,看返回的值是否正确,把loop函数像下面这样改
void loop()
{
// 读取一次角度传感器的值
// float angle = angle_sensor.modbus_getAngle(0x00); // ESP32下运行一次大概2077us
uint8_t rec_hex_main[8];
// hex命令长8字节,结构:|ID|CMD|RegH|RegL|LenH|LenL|CRCH|CRCL|
// 下面的命令读取0xD4寄存器,即设备ID寄存器
uint8_t cmd_hex[8] = {0x00, 0x03, 0x00, 0xD4, 0x00, 0x01, 0xC5, 0xE3};
angle_sensor.send_hex(rec_hex_main, cmd_hex);
// 16进制形式输出rec_hex_main中数据,输出应为 00 03 02 00 00 85 84
Serial.write(rec_hex_main, 8);
Serial.println();
delay(100);
}
from jy-me01.
报错是CRC校验失败了,在第151行,原因可能有很多,你可以自行把
cmd_hex_full
,rec_hex_main
这两个输出的内容打印出来看看有没有错误,前者是读取指令,8个字节,格式为|ID|CMD|RegH|RegL|LenH|LenL|CRCH|CRCL|
后者是接收到的包含角度数据的帧,二者都是16进制值
JY-ME01/angle_sensor/angle_sensor.hpp
Line 185 in 890dc1f
好的大佬,我晚上再去实验室试试
from jy-me01.
你也可以用arduino向传感器发送16进制指令,看返回的值是否正确,把loop函数像下面这样改
void loop() { // 读取一次角度传感器的值 // float angle = angle_sensor.modbus_getAngle(0x00); // ESP32下运行一次大概2077us uint8_t rec_hex_main[8]; // hex命令长8字节,结构:|ID|CMD|RegH|RegL|LenH|LenL|CRCH|CRCL| // 下面的命令读取0xD4寄存器,即设备ID寄存器 uint8_t cmd_hex[8] = {0x00, 0x03, 0x00, 0xD4, 0x00, 0x01, 0xC5, 0xE3}; angle_sensor.send_hex(rec_hex_main, cmd_hex); // 16进制形式输出rec_hex_main中数据,输出应为 00 03 02 00 00 85 84 Serial.write(rec_hex_main, 8); Serial.println(); delay(100); }
from jy-me01.
from jy-me01.
确实,为啥都是空数组,你试试直接将传感器跟电脑连起来,用串口工具在16进制下发送00 03 00 D4 00 01 C5 E3
,看看有没有回应
from jy-me01.
这是要执行Serial2.begin(9600);
的意思,😂要先用begin函数设置波特率才能使串口开启,然后才能通过串口进行通信
from jy-me01.
这个是直接用USB-TTL连电脑的结果,AT各指令都没问题
from jy-me01.
是不是我用arduino连接传感器的步骤出问题了,我是只用了5V-RT交换对接-GND的联线,目前接在R0和T0上,没做别的操作。
serial的串口默认是对USB的,也就是连接电脑的那个;
但是serial2的串口我不知道是拿一套,目前就四套全试接了一遍,也没连上,是不是漏了什么步骤。
from jy-me01.
也有可能哈,百度了张图,你要是这块板子的话串口2对应的就是TX2
跟 RX2
引脚
from jy-me01.
我接了RX2和TX2,返回值还是跟刚才一样报错
“
收←◆CRC鏍¢獙澶辫触,鏁版嵁鍙兘瀛樺
收←◆湪涓㈠け
\0\0\0\0\0\0\0\0
”
这个前置操作只有接上串口线和烧录程序吧。萌新迷茫ing
from jy-me01.
对啊,你最后再试试用电脑上的串口工具在16进制下发送00 03 00 D4 00 01 C5 E3
看看返回什么消息
from jy-me01.
实在不行你换块ESP32开发板看看,毕竟我只在ESP32上做过测试😂
from jy-me01.
对啊,你最后再试试用电脑上的串口工具在16进制下发送
00 03 00 D4 00 01 C5 E3
看看返回什么消息
ESP32在淘宝上有好多种类型,不知道买哪款啊
from jy-me01.
这个是直接用USB-TTL连电脑的结果,AT各指令都没问题
这个传感器好像是可以直接用TTL通讯到上位机输出Angel,那么可以连接到Arduino后用板子直接读取到这个角度数据吗
from jy-me01.
没有回应说明modbus通信没有成功,可能是CRC校验的问题,不知道是不是厂家改了CRC校验的方式
Arduino也能直接读取传感器发回来的字符串然后用atof()
函数转换成小数就行了,原理跟ASCII模式下获取角度值是一样的
你可以参考库里的函数自己写一个
// 封装好的函数,ASCII模式下调用即可返回角度值
float ANGLE_SENSOR::ascii_getAngle(uint8_t modbus_id)
{
char rec_str_main[20];
memset(rec_str_main, '\0', 20);
send_string(rec_str_main, "AT+PRATE=0");
angle = atof(rec_str_main + 10);
printf("a:%.3f\n", angle);
return angle;
}
不过ASCII模式最高速度要比MODBUS慢,对速度有要求的话还是MODBUS模式好
from jy-me01.
from jy-me01.
我试着换成ASCII模式下,调用ANGLE_SENSOR::ascii_getAngle函数去读取数据,但是返回的a还是一直显示0。
但这次就不再有CRC报错了
from jy-me01.
他成功读到了啊啊啊啊啊啊我好开心啊
感谢大佬一直来的帮助!!!
from jy-me01.
哈哈,恭喜恭喜😄
from jy-me01.
Related Issues (2)
- 串口通讯要求 HOT 14
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jy-me01.