通过I2C在Arduino和RPi IOT C之间发送JSON字符串#
我正试图通过I2C将一个JSON字符串从Arduino Uno发送到运行Win IOT Core的RaspPi 连接工作正常,我在Arduino端注册了一个事件处理程序,当主服务器(rpi)请求数据时,它被称为fine通过I2C在Arduino和RPi IOT C之间发送JSON字符串#,arduino,raspberry-pi,i2c,windows-10-iot-core,Arduino,Raspberry Pi,I2c,Windows 10 Iot Core,我正试图通过I2C将一个JSON字符串从Arduino Uno发送到运行Win IOT Core的RaspPi 连接工作正常,我在Arduino端注册了一个事件处理程序,当主服务器(rpi)请求数据时,它被称为fine void I2CRequest() { Serial.println(“收到I2C请求”); /*向WinIoT发送数据*/ int bt=Wire.write(lastJSON.c_str()); Serial.println(lastJSON); Serial.print(“
void I2CRequest()
{
Serial.println(“收到I2C请求”);
/*向WinIoT发送数据*/
int bt=Wire.write(lastJSON.c_str());
Serial.println(lastJSON);
Serial.print(“发送字节:”);
序列号println(bt);
}
串行监视器上的输出看起来也很好
I2C Request received
{"Sensor":"OneWire","data":["28ffc8675216451",23.9375,"28ff9feb521645e",24.0625]}
Send bytes: 81
RPi上的C#方法如下所示:
公共静态异步任务GetI2CTemperations()
{
var ReceivedData=新字节[1024];
/*Arduino Nano的I2C从机地址*/
int SlaveAddress=64;//0x40
尝试
{
//初始化I2C
var设置=新的I2cConnectionSettings(SlaveAddress);
Settings.BusSpeed=I2cBusSpeed.StandardMode;
如果(AQS==null | | DIS==null)
{
AQS=I2cDevice.GetDeviceSelector(“I2C1”);
DIS=等待设备信息。FindAllAsync(AQS);
}
正在使用(I2cDevice Device=await I2cDevice.FromIdAsync(DIS[0].Id,设置))
{
如果(设备==null)
{
Debug.Write(“无法访问I2C设备”);
}
/*读Arduino的书*/
设备读取(接收数据);
}
}
捕获(例外情况除外)
{
WriteLine(“读取I2C时发生异常”,ex);
//抑制任何错误
}
/*返回接收到的数据或错误为零*/
返回接收数据;
}
}
不幸的是,无论我做什么,结果都是ReceivedData
a00
作为第一个字节,后跟FF
s.我还尝试了
Device.ReadPartial()
而不是Device.Read()
,结果相同
有人能告诉我我做错了什么吗?也许将这个字节数组转换成字符串可以提供更多信息
String myString = (char*)myByteArray
Arduino平台上的write()
命令只写入一个字节。您正试图在单个命令中写入整个字符串。您需要在数组中循环并分别发送每个字节
但是,一旦执行此操作,就会遇到32字节缓冲区限制。可以将缓冲区增加到64字节,但这是Uno(Atmel 328)的限制
我将一些代码放在一起,展示如何在Uno和Raspberry Pi之间建立一种关系,这种关系可以传输不同大小的JSON字符串。代码位于GitHub中的
如果您想了解更多使用I2C在运行Windows IoT Core的Arduino和Raspberry Pi之间进行通信的方法,请参阅我的Hackster项目,网址为:
- 架起树莓皮和阿杜伊诺的桥梁
- 树莓皮的DHT小突破
- 在Raspberry Pi上发现i2c设备
Serial.println(“收到I2C请求”)代码>在I2CRequest()
中?我尝试过,(当然)也得到了同样的结果。。。删除日志消息应该如何帮助?