You need to enable JavaScript to run this app. ATTiny85串口传4位数字经ATTiny45中转至树莓派无法正常接收问题
优惠活动
大模型
产品
解决方案
定价
更多

ATTiny85串口传4位数字经ATTiny45中转至树莓派无法正常接收问题

问题根因与修复方案

核心错误1:ATTiny45转发逻辑错误

ATTiny85调用println(c1)时,会先将整数转换为对应ASCII字符串输出,比如发送1234时实际输出的是'1'、'2'、'3'、'4'、'\r'、'\n'6个字节的ASCII码。
而ATTiny45中fromA85.read()返回的是单字节的ASCII码数值(比如读到'1'返回整数49),你直接调用toRip.println(整数值)会把这个ASCII数值再转一次十进制字符串输出,相当于做了两次数值转字符串操作,原始数据完全被篡改。
比如发送1234时,ATTiny45处理后输出的数据会变成"49\r\n50\r\n51\r\n52\r\n13\r\n10\r\n",数据量翻倍还多。3位数字时数据量小还能勉强适配缓存,4位数字时数据量超过ATTiny软串口的小缓存,就会出现溢出、丢包、乱码。

核心错误2:树莓派代码存在语法/配置错误

  • 串口路径缺少根路径斜杠,dev/serial0需改为/dev/serial0
  • 停止位参数拼写错误,STOPBITS_ON需改为STOPBITS_ONE
  • 参数定义行末尾缺少逗号,语法不完整

修复后的代码

ATTiny45修改部分

仅需修改loop逻辑,改为直接透传原始字节即可:

void loop() {
  if (fromA85.available()){
    char recv_char = fromA85.read();
    toRip.write(recv_char); // 直接输出原始字节,不要转成整数字符串
  }
}

树莓派修改后完整代码

import serial
ser = serial.Serial(
    '/dev/serial0',
    9600,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    timeout=1
)
while True:
    data = ser.readline()
    if data:
        print(data.decode('utf-8').strip())

ATTiny85修改部分

仅需把c1的赋值改为你需要的4位整数即可:
int c1 = 1234;


内容的提问来源于stack exchange,提问作者user5128720

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 11:00:00