gpt4 book ai didi

python - 数据传输错误 I2C RasPi->Arduino

转载 作者:太空宇宙 更新时间:2023-11-04 05:46:11 28 4
gpt4 key购买 nike

我正在修补我的 RaspberryPi 和我的 Arduino 以通过 I2C 发送一些文本。到目前为止我已经开始工作了,但是出现了一个不应该存在的数字。

我正在发送“Hello”,将其转换为 int 数组并通过 I2C 发送。

['H','e','l','l','o'] => [72,97,108,108,111] // This should be the result
['H','e','l','l','o'] => [0, 5, 72, 101, 108, 108, 111] // This is what i get

前导 0 是故意的,但 5 根本不应该存在!

我在 Arduino 上运行的(缩短的)代码:

void setup() {
Serial.begin(9600); // start serial for output
// initialize i2c as slave
Wire.begin(SLAVE_ADDRESS);

// define callbacks for i2c communication
Wire.onReceive(receiveData);
Serial.println("Ready!");
}

receiveData(int byteCount) {
int i;

// Iterate through the byte packets
for(i = 0; Wire.available(); i++) {
number = Wire.read();

if(i != 0) { // Ignore the first byte
text[i-1] = (char)number;
}

// Output number, byteCount, and i over the serial bus
}

Serial.print("Result: ");
Serial.println(text);
}

我得到的确切输出:

[CMD]data received: 0, 2char: , byteCount: 7, Iteration: 0 //The cmd byte
data received: 5, 2char: , byteCount: 7, Iteration: 1
data received: 72, 2char: H, byteCount: 7, Iteration: 2
data received: 101, 2char: e, byteCount: 7, Iteration: 3
data received: 108, 2char: l, byteCount: 7, Iteration: 4
data received: 108, 2char: l, byteCount: 7, Iteration: 5
data received: 111, 2char: o, byteCount: 7, Iteration: 6
Result: "Hello"

在树莓派上运行的代码(Python):

import smbus
import time

# Initiate the SMBus on device 1
bus = smbus.SMBus(1)

# The address of the Arduino
address = 0x04

chars = [] # The character/int array
test = "Hello" # The test text

# Split up the string in individual chars,
# convert them to int and add them to the array
for c in test:
chars.append(ord(c))

# send the data... the 0 is the cmd byte! The function accepts an int array
bus.write_block_data(address, 0, chars)

最佳答案

仅从显示的值来看,很可能是传输的字符串部分中发送的字符数或字节数。 “Hello”在 ASCII 表示中有 5 个字节。

如果您查看 smbus protocol 的描述在 write_block_data 命令的部分中,它记录了在给出数据 block 长度的命令字节之后发送一个 8 位计数。

SMBus Block Write: i2c_smbus_write_block_data()

The opposite of the Block Read command, this writes up to 32 bytes to a device, to a designated register that is specified through the Comm byte. The amount of data is specified in the Count byte.

S Addr Wr [A] Comm [A] Count [A] Data [A] Data [A] ... [A] Data [A] P

关于python - 数据传输错误 I2C RasPi->Arduino,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32203022/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com