I have a project I'm working on, that will eventually be a raspberry pi running Ubuntu also, but right now I just want to write code that includes wiringPi.h, and wiringSerial.h
I tried installing wiringpi sudo apt-get install wiringpi, but this did not evidently include the C/C++ libraries for wiringpi.
how can I get the wiringpi C/C++ libraries installed on my ubuntu desktop? the only hardware I am using is a serial port, there shouldn't be any issues with available GPIO.
I am using Ubuntu 20.04 focal
11 Answer
It was steel drivers comment, that solved it.sudo apt-get install libwiringpi-dev
There are some issues with libwiringpi-dev. You don't want to call wiringPiSetup(); you'll probably get
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.which the reason is you're using a non arm based CPU,and the file its looking at isn't formatted the way it expects. fortunately I don't require any of that, I just wanted to use the simple serial port library.
I also had trouble with sending data via serialPuts(), but I don't need to do the handshaking.. I guess.
This is a little project that reads an Arduino uno with 2 potentiometers and a button, the goal is to use the pots to draw pictures on a screen, or in an image...
#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;
}the data being sent via the Arduino is via this code:
/*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); }and here it is working good enough to go into the parsing / drawing program