Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过I2C在Arduino和RPi IOT C之间发送JSON字符串#_Arduino_Raspberry Pi_I2c_Windows 10 Iot Core - Fatal编程技术网

通过I2C在Arduino和RPi IOT C之间发送JSON字符串#

通过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(“

我正试图通过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(“发送字节:”);
序列号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
a
00
作为第一个字节,后跟
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()
中?我尝试过,(当然)也得到了同样的结果。。。删除日志消息应该如何帮助?