我正在进行一个项目,最终也将是一个运行 Ubuntu 的树莓派,但现在我只想编写包含 wiringPi.h 和 wiringSerial.h 的代码。我尝试安装 wiringpi sudo apt-get install wiringpi
,但这显然不包括 wiringpi 的 C/C++ 库。
如何在我的 ubuntu 桌面上安装 wiringpi C/C++ 库?我使用的唯一硬件是串行端口,可用的 GPIO 应该不会有任何问题。
我正在使用 Ubuntu 20.04 focus
答案1
钢铁司机的评论解决了这个问题。
sudo apt-get install libwiringpi-dev
libwiringpi-dev 存在一些问题。您不想调用 wiringPiSetup();您可能会得到
Oops: Unable to determine board revision from /proc/device-tree/system/linux,revision
or from /proc/cpuinfo
-> No "Hardware" line
-> You'd best google the error to find out why.
原因是您使用的不是基于 Arm 的 CPU,并且它查看的文件未按预期格式化。幸运的是我不需要任何这些,我只是想使用简单的串行端口库。
我也遇到了通过 serialPuts() 发送数据的问题,但我想我不需要进行握手。
这是一个读取带有 2 个电位器和一个按钮的 Arduino uno 的小项目,目的是使用电位器在屏幕上或图像中绘制图形...
#include <iostream>
#include <stdio.h>
#include <unistd.h> //read function
#include <string.h>
#include <wiringSerial.h> //simple serial port library
using namespace std;
//compiled with g++ -Wall -o readSerial readSerial.cpp -lwiringPi
int main(int argc, char ** argv)
{
const char *SensorPort = "/dev/ttyACM0"; //Serial Device Address
int levelSensor = serialOpen(SensorPort, 9600);
//serialPuts(levelSensor, "1"); //Send command to the serial device
while (1){
char buffer[100];
ssize_t length = read(levelSensor, &buffer, sizeof(buffer));
if (length == -1){
cerr << "Error reading from serial port" << endl;
break;
}
else if (length == 0){
cerr << "No more data" << endl;
break;
}else{
buffer[length] = '\0';
cout << buffer; //Read serial data
}
}
return 0;
}
通过 Arduino 发送的数据是通过以下代码:
/*EtchaSketch
* 2 pots, X,Y, increment
*
* add a button to delete this shtuff
* This program communicates on the serial port, to a separate program that handles the drawing of received coordinates (pot values).
*/
int potX = A0;
int potY = A1;
int sensorValX = 0;
int sensorValY = 0;
int del = 1; //a button on pin 1 for deleting drawn content
int delbutton = 0;
void setup() {
Serial.begin(9600);
pinMode(del, INPUT);
}
void loop() {
// read the value from the pots:
if(digitalRead(del) == HIGH ){
delbutton=1;
}else{
delbutton=0;
}
sensorValX = analogRead(potX);
sensorValY = analogRead(potY);
Serial.print(sensorValX);
Serial.print(",");
Serial.print(sensorValY);
Serial.print(",");
Serial.println(delbutton);
delay(1000);
}