使用C ++在RPi和Arduino之间进行串行通信

时间:2018-03-30 15:39:30

标签: raspberry-pi c++14 arduino-uno serial-communication wiringpi

我编写了两段代码,用C ++在Arduino和Raspberry Pi之间创建串行通信。代码是:

void setup() {
  Serial.begin(9600); // opens serial port, sets data rate to 9600 baud
}

void loop() {
 Serial.println("Hello from arduino");
 delay(500);
}

Raspberry中的C ++代码是:

#include <iostream>
#include <wiringPi.h>
#include <wiringSerial.h>

using namespace std ; 
int serialDeviceId=0; 
int main(void)

{
    int pin=7;  
    serialDeviceId= serialOpen("/dev/ttyACM1",9600);
    if(serialDeviceId==-1)
     {
     cout<<"Unable to open serial device"<<endl;
     return 1; 
     }  
    if(wiringPiSetup()==-1)
    {
        return 0 ;
    }
    pinMode(pin,OUTPUT); // designing pin as an output 
    while(1) 
    {
        digitalWrite(pin,0);
        delay(500);
        digitalWrite(pin,1);
        delay(500);     
    }
    return 0;
}

所以现在我想用串口读取串口数据,我发现我可以使用SerialGetchar,但我不确切知道如何使用它。我只需要在我的代码中需要这个部分,这样我就可以从我的Arduino代码中接收串行编写的“来自arduino的Hello”。

1 个答案:

答案 0 :(得分:1)

此代码应该适用于Raspberry Pi。这非常简单!通过运行以下命令确保获得正确的设备专用文件:

dmesg

并寻找这样的一行:

[610106.464745] usb 1-1.4: new full-speed USB device number 4 using dwc_otg
[610106.608642] usb 1-1.4: New USB device found, idVendor=2341, idProduct=0043
[610106.608655] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=220
[610106.608663] usb 1-1.4: Manufacturer: Arduino (www.arduino.cc)
[610106.608671] usb 1-1.4: SerialNumber: 55731323536351E002E1
[610106.686193] cdc_acm 1-1.4:1.0: ttyACM0: USB ACM device
#include <stdio.h>
#include <string.h>
#include <errno.h>

#include <wiringSerial.h>

int main ()
{
  int fd ;

  if((fd=serialOpen("/dev/ttyACM0",9600))<0){
    fprintf(stderr,"Unable to open serial device: %s\n",strerror(errno));
    return 1;
  }

  for (;;){
    putchar(serialGetchar(fd));
    fflush(stdout);
  }
}

我假设你有一根USB线将RaspberryPi USB端口连接到Arduino上的USB端口。