Giter Club home page Giter Club logo

Comments (23)

jiangsl1303 avatar jiangsl1303 commented on September 26, 2024

O21-6-YPHFH7-ZKBED-2-R.png
此外我也测试了大佬写的ASCII模式,回传到串口的数据也没有动静。不过这次不是乱码, 应该是我接受modbus数据的时候哪里设置有问题。

from jy-me01.

jiangsl1303 avatar jiangsl1303 commented on September 26, 2024

正在上传 IMG_20230426_172914.jpg…
不知道是不是我接线问题。数据一直- [ ] 读不出来。

这两天尝试用USB-ttl连接传感器,结果串口工具直接就弹出输出结果。
因此想过用arduino直接读取ttl数据,不过查了很多资料也没整明白23333

from jy-me01.

guohaomeng avatar guohaomeng commented on September 26, 2024

报错是CRC校验失败了,在第151行,原因可能有很多,你可以自行把cmd_hex_fullrec_hex_main这两个输出的内容打印出来看看有没有错误,前者是读取指令,8个字节,格式为 |ID|CMD|RegH|RegL|LenH|LenL|CRCH|CRCL| 后者是接收到的包含角度数据的帧,二者都是16进制值

return send_hex(rec_hex_main, cmd_hex_full); // 发送读取寄存器命令,并将返回值存到rec_hex_main中

image.png

from jy-me01.

guohaomeng avatar guohaomeng commented on September 26, 2024

按理说电脑连接传感器后,线接好,波特率设置对,模式设置为modbus,串口工具16进制下发送00 03 00 D4 00 01 C5 E3 传感器会回复 00 03 02 00 00 85 84 ,像说明书里的这个图一样,你可以检查下回复是否正确
image.png

from jy-me01.

guohaomeng avatar guohaomeng commented on September 26, 2024

你也可以用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.

jiangsl1303 avatar jiangsl1303 commented on September 26, 2024

报错是CRC校验失败了,在第151行,原因可能有很多,你可以自行把cmd_hex_fullrec_hex_main这两个输出的内容打印出来看看有没有错误,前者是读取指令,8个字节,格式为 |ID|CMD|RegH|RegL|LenH|LenL|CRCH|CRCL| 后者是接收到的包含角度数据的帧,二者都是16进制值

return send_hex(rec_hex_main, cmd_hex_full); // 发送读取寄存器命令,并将返回值存到rec_hex_main中

image.png

好的大佬,我晚上再去实验室试试

from jy-me01.

jiangsl1303 avatar jiangsl1303 commented on September 26, 2024

你也可以用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);
}

F126-5-Q-1-D-L3-I-K4-B.png
这个是输出的数据,看起来不大对劲

from jy-me01.

jiangsl1303 avatar jiangsl1303 commented on September 26, 2024

BYSP5-WV9-G7-S1-ZP8-D-M-T.png
对了问下大佬,这步是啥意思。串口不是本身就开启的吗

from jy-me01.

guohaomeng avatar guohaomeng commented on September 26, 2024

确实,为啥都是空数组,你试试直接将传感器跟电脑连起来,用串口工具在16进制下发送00 03 00 D4 00 01 C5 E3,看看有没有回应

from jy-me01.

guohaomeng avatar guohaomeng commented on September 26, 2024

BYSP5-WV9-G7-S1-ZP8-D-M-T.png 对了问下大佬,这步是啥意思。串口不是本身就开启的吗

这是要执行Serial2.begin(9600);的意思,😂要先用begin函数设置波特率才能使串口开启,然后才能通过串口进行通信

from jy-me01.

jiangsl1303 avatar jiangsl1303 commented on September 26, 2024

HS-A5-ZW5-33-69-J-HUOAN.png

这个是直接用USB-TTL连电脑的结果,AT各指令都没问题

from jy-me01.

jiangsl1303 avatar jiangsl1303 commented on September 26, 2024

是不是我用arduino连接传感器的步骤出问题了,我是只用了5V-RT交换对接-GND的联线,目前接在R0和T0上,没做别的操作。

serial的串口默认是对USB的,也就是连接电脑的那个;
但是serial2的串口我不知道是拿一套,目前就四套全试接了一遍,也没连上,是不是漏了什么步骤。

from jy-me01.

guohaomeng avatar guohaomeng commented on September 26, 2024

也有可能哈,百度了张图,你要是这块板子的话串口2对应的就是TX2RX2引脚
001

from jy-me01.

jiangsl1303 avatar jiangsl1303 commented on September 26, 2024

也有可能哈,百度了张图,你要是这块板子的话串口2对应的就是TX2RX2引脚 001

我接了RX2和TX2,返回值还是跟刚才一样报错

收←◆CRC鏍¢獙澶辫触,鏁版嵁鍙兘瀛樺
收←◆湪涓㈠け
\0\0\0\0\0\0\0\0

这个前置操作只有接上串口线和烧录程序吧。萌新迷茫ing

from jy-me01.

guohaomeng avatar guohaomeng commented on September 26, 2024

对啊,你最后再试试用电脑上的串口工具在16进制下发送00 03 00 D4 00 01 C5 E3 看看返回什么消息

from jy-me01.

guohaomeng avatar guohaomeng commented on September 26, 2024

实在不行你换块ESP32开发板看看,毕竟我只在ESP32上做过测试😂

from jy-me01.

jiangsl1303 avatar jiangsl1303 commented on September 26, 2024

对啊,你最后再试试用电脑上的串口工具在16进制下发送00 03 00 D4 00 01 C5 E3 看看返回什么消息

K-IQP-EJP-DFLDZAJ48-OX.png
尝试发送,但是好像没回应。

ESP32在淘宝上有好多种类型,不知道买哪款啊

from jy-me01.

jiangsl1303 avatar jiangsl1303 commented on September 26, 2024

HS-A5-ZW5-33-69-J-HUOAN.png

这个是直接用USB-TTL连电脑的结果,AT各指令都没问题

这个传感器好像是可以直接用TTL通讯到上位机输出Angel,那么可以连接到Arduino后用板子直接读取到这个角度数据吗

from jy-me01.

guohaomeng avatar guohaomeng commented on September 26, 2024

没有回应说明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.

jiangsl1303 avatar jiangsl1303 commented on September 26, 2024

from jy-me01.

jiangsl1303 avatar jiangsl1303 commented on September 26, 2024

7-QG7-8-G-W-H-S0-P-9.png

我试着换成ASCII模式下,调用ANGLE_SENSOR::ascii_getAngle函数去读取数据,但是返回的a还是一直显示0。
但这次就不再有CRC报错了

from jy-me01.

jiangsl1303 avatar jiangsl1303 commented on September 26, 2024

S-4-KKZ9-NERXUG-IMFH1-S8-X.png

他成功读到了啊啊啊啊啊啊我好开心啊
感谢大佬一直来的帮助!!!

from jy-me01.

guohaomeng avatar guohaomeng commented on September 26, 2024

哈哈,恭喜恭喜😄

from jy-me01.

Related Issues (2)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.