使用 C++ 在 RPi 和 Arduino 之间进行串行通信
Serial communication between RPi and Arduino using C++
我写了两段代码,使用 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;
}
所以现在我想一直使用 wiringpi 从串口读取数据,我发现我可以使用 SerialGetchar,但我不知道如何使用它。我只需要在我的代码中需要这部分,这样我就可以从我的 Arduino 代码中接收到以串行方式编写的 "Hello from from arduino"。
此代码应该适用于 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 端口。
我写了两段代码,使用 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;
}
所以现在我想一直使用 wiringpi 从串口读取数据,我发现我可以使用 SerialGetchar,但我不知道如何使用它。我只需要在我的代码中需要这部分,这样我就可以从我的 Arduino 代码中接收到以串行方式编写的 "Hello from from arduino"。
此代码应该适用于 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 端口。