Archiv verlassen und diese Seite im Standarddesign anzeigen : Arduino Mega am Raspi Pi 3
hirnfrei
04.05.2016, 22:52
Mahlzeit!
Da ich derzeit noch keine Möglichkeit habe, die 5V vom Arduino in 3,3V vom Raspi zu wandeln (was brauche ich dafür eigentlich genau?) muss ich derzeit noch über USB gehen.
Jetzt wäre mir mal aufgefallen, ich habe noch nie auf eine serielle Schnittstelle mittels C++ zugegriffen. Daher brauche ich Hilfe.
Wie öffne ich ttyAMA0 in C++ mit der Baud Rate die der Arduino aus gibt? 115200 wären das aktuell. Ich würde gerne lesen und schreiben. Gibts da einen Weg das so ähnlich easy zu machen wie beim Arduino?
Hallo,
hatte nicht HaWe in einen seiner letzten Threads hier da was dazu drin ?
Das Thema ist mir jetzt etwas zu umfangreich, um ein Beispiel zu schreiben. Außerdem gibt es zu Terminal IO unter Unix sehr viel im Netz.
https://www.cmrr.umn.edu/~strupp/serial.html
https://en.wikibooks.org/wiki/Serial_Programming/Serial_Linux
...
peterfido
05.05.2016, 09:47
HAllo,
entweder fertige Portwandler nutzen oder hier mal im Internetradio Wiki den Vorschlag von mir nachbauen. Wenn Du mutig bist und im Programm und der Hardware wirklich keine Fehler hast, kannst Du auch 5V>>3V3 mittels Spannungsteiler realisiern und 3V3>>5V einfach (per Längswiderstand) verbinden. Der AVR erkennt die 3V3 als High.
Soll der Raspi den AVR auch programmieren können, kommst Du um einen kompletten Pegelwandler nicht herum. Ich nehme immer DieseHier (http://www.amazon.de/SparkFun-bi-direktionaler-Pegelwandler-Logic-Converter/dp/B00M7U5DV2/ref=sr_1_3?ie=UTF8&qid=1462434392&sr=8-3&keywords=pegelwandler+5v+3+3v), funktionieren 1A für ISP (MOSI, MISO, CLK, Reset).
Hallo,
hatte nicht HaWe in einen seiner letzten Threads hier da was dazu drin ?...
hallo,
meinst du dies hier? Ist allerdings nur über Arduino und Raspi C/C++:
UART: http://www.mindstormsforum.de/viewtopic.php?f=78&t=8689&p=67907#p67781
UART "Level Shifter" http://www.mindstormsforum.de/viewtopic.php?f=78&t=8689&p=67907#p67813
UART-Verbindung zu Arduino: http://www.mindstormsforum.de/viewtopic.php?f=78&t=8689&p=67907#p67815
Nutzung von USB für Arduino- bzw. USB-zu-UART: http://www.mindstormsforum.de/viewtopic.php?f=78&t=8689&p=67907#p67830
auf dem Pi ihabe ich 115200 als UART- und USB-baud rate eingestellt (ich benutze die wiringPi libs!):
// UART Serial com port
Serial1 = serialOpen (uart, 115200);
HTH!
hallo,
meinst du dies hier?
Ja, das wird es wohl gewesen sein, es tauchte wohl indirekt in einem anderen Post auf. Ob der Arduino am UART oder USB des Pi hängt, macht von der Programmierung auf dem Pi keinen großen Unterschied. Es unterscheiden sich ja nur der Schnittstellenname und die Schritte zum Einrichten des UART entfallen.
In den ganzen Links sollten sich jetzt eigentlich genügend Codebeispiele finden.
Ob der Arduino am UART oder USB des Pi hängt, macht von der Programmierung auf dem Pi keinen großen Unterschied. Es unterscheiden sich ja nur der Schnittstellenname und die Schritte zum Einrichten des UART entfallen.
stimmt natürlich !
hirnfrei
05.05.2016, 18:06
Okay, super danke! wireringPi war das was ich gesucht habe!
HaWe reicht ein Spannungsteiler da wirklich aus? Das wäre ja zu einfach ;). Ich will auch nichts darüber programmieren, nur Text zum Arduino schicken und von ihm lesen.
Jetzt habe ich aber ein neues Problem. Ich habe ein kleines Programm in C++ gebastelt, welches nichts machen soll als Serial zu öffnen, die Meldung dafür auszugeben und wieder zu schliessen. wireingPi habe ich installiert, dass klappt alles. Nur wenn ich es compilieren will gibt es Fehler.
Als Fehler bekomme ich
Unknown option -lwiringPi
mein Makefile sieht so aus:
SRC = serial.cpp
OBJ = ${SRC:.cpp=.o}
CC = g++
CFLAGS = `pkg-config --cflags`
LIBS = `pkg-config --libs -lwiringPi -lwiringPiDev`
all: .cpp.o serial
.cpp.o:
@echo CC ${SRC}
@${CC} ${CFLAGS} -c -O2 -fomit-frame-pointer ${SRC}
serial: ${OBJ}
@echo CC -o $@
@${CC} ${LIBS} -o serial ${OBJ}
ich nutze kein make(file), ich verwende Geany mit
compile:
g++ -Wall -I/opt/vc/include -I/opt/vc/include/interface/vmcs_host/linux -I/opt/vc/include/interface/vcos/pthreads -c "%f" -pthread -lshapes -lOpenVG -lEGL -lrt -lwiringPi
build:
g++ -Wall -I/opt/vc/include -I/opt/vc/include/interface/vmcs_host/linux -I/opt/vc/include/interface/vcos/pthreads -o "%e" "%f" -pthread -lshapes -L/opt/vc/lib -lOpenVG -lEGL -lrt -lwiringPi
http://www.mindstormsforum.de/viewtopic.php?f=78&t=8689#p67924
und verlass dich mal auf die Referenzen, das klappt schon!
hirnfrei
05.05.2016, 19:36
Liegt es im Bereich des Möglichen das die lwiringPi nicht an der richtigen Stelle installiert ist oder ich noch einen Pfad angeben muss? Denn mit Geany funktioniert es auch nicht, wenngleich Geany über ssh viel besser läuft wie QtCreator!
wenn du dich streng an meine Installationsanleitung gehalten hast (die ich direkt von Gordon Henderson's Website habe), dann wurde sie korrekt installiert.
Ich hab es inzwischen 3x erfolgreich für Neuinstallationen gemacht.
Aber du musst ntl wirklich alles 100% Schritt für Schritt befolgen.
was ergibt denn
gpio -v
gpio readall
?
und mach es wie ich mit Geany lokal, nicht über ssh, genau wegen der System- und Installations-Pfade etc.!
Die genaue Geany Installation steht bei mir ein wenig drüber!
(wenn du es anders machst, habe ich keine Vergleichsmöglichkeiten)
hirnfrei
05.05.2016, 20:01
Ja ich habe mich streng daran gehalten.
Lokal kann ich schlecht mit dem Raspi arbeiten, habe momentan nichts dran.
pi@raspi:~/Entwicklung/Serial $ gpio -v
gpio version: 2.32
Copyright (c) 2012-2015 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty
Raspberry Pi Details:
Type: Pi 3, Revision: 02, Memory: 1024MB, Maker: Sony
* Device tree is enabled.
* This Raspberry Pi supports user-level GPIO access.
-> See the man-page for more details
-> ie. export WIRINGPI_GPIOMEM=1
pi@raspi:~/Entwicklung/Serial $
pi@raspi:~/Entwicklung/Serial $ gpio readall
+-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| | | 3.3v | | | 1 || 2 | | | 5v | | |
| 2 | 8 | SDA.1 | IN | 1 | 3 || 4 | | | 5V | | |
| 3 | 9 | SCL.1 | IN | 1 | 5 || 6 | | | 0v | | |
| 4 | 7 | GPIO. 7 | IN | 1 | 7 || 8 | 1 | ALT5 | TxD | 15 | 14 |
| | | 0v | | | 9 || 10 | 1 | ALT5 | RxD | 16 | 15 |
| 17 | 0 | GPIO. 0 | IN | 0 | 11 || 12 | 0 | IN | GPIO. 1 | 1 | 18 |
| 27 | 2 | GPIO. 2 | IN | 0 | 13 || 14 | | | 0v | | |
| 22 | 3 | GPIO. 3 | IN | 0 | 15 || 16 | 0 | IN | GPIO. 4 | 4 | 23 |
| | | 3.3v | | | 17 || 18 | 0 | IN | GPIO. 5 | 5 | 24 |
| 10 | 12 | MOSI | IN | 0 | 19 || 20 | | | 0v | | |
| 9 | 13 | MISO | IN | 0 | 21 || 22 | 0 | IN | GPIO. 6 | 6 | 25 |
| 11 | 14 | SCLK | IN | 0 | 23 || 24 | 1 | IN | CE0 | 10 | 8 |
| | | 0v | | | 25 || 26 | 1 | IN | CE1 | 11 | 7 |
| 0 | 30 | SDA.0 | IN | 1 | 27 || 28 | 1 | IN | SCL.0 | 31 | 1 |
| 5 | 21 | GPIO.21 | IN | 1 | 29 || 30 | | | 0v | | |
| 6 | 22 | GPIO.22 | IN | 1 | 31 || 32 | 0 | IN | GPIO.26 | 26 | 12 |
| 13 | 23 | GPIO.23 | IN | 0 | 33 || 34 | | | 0v | | |
| 19 | 24 | GPIO.24 | IN | 0 | 35 || 36 | 0 | IN | GPIO.27 | 27 | 16 |
| 26 | 25 | GPIO.25 | IN | 0 | 37 || 38 | 0 | IN | GPIO.28 | 28 | 20 |
| | | 0v | | | 39 || 40 | 0 | IN | GPIO.29 | 29 | 21 |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+
pi@raspi:~/Entwicklung/Serial $
Also soweit scheint das zu passen. Nach dem Essen stöpsel ich den Raspi mal im Schlafzimmer dran, mal schauen ob das dann geht. Würde mich aber stark wundern wenn das ein Unterschied machen würde. Arbeite ja nicht zum ersten Mal mit ssh auf anderen Rechnern.
dann weiß ich nicht weiter bei dir - vlt ein Pi 3 Bug?
Ich habe 2 Pi 2, bei beiden funzt es wunderbar... :-/
... bzw...:
wie compiliert und läuft dieses Beispiel?
/*
* blink.c:
* blinks the first LED
* Gordon Henderson, projects@drogon.net
*/
#include <stdio.h>
#include <wiringPi.h>
int main (void)
{
printf ("Raspberry Pi blink\n") ;
if (wiringPiSetup () == -1)
return 1 ;
pinMode (0, OUTPUT) ; // aka BCM_GPIO pin 17
for (;;)
{
digitalWrite (0, 1) ; // On
delay (500) ; // mS
digitalWrite (0, 0) ; // Off
delay (500) ;
}
return 0 ;
}
gcc -o blink blink.c -lwiringPi
//and run with:
sudo ./blink
hirnfrei
05.05.2016, 20:37
Funktioniert einwandfrei. Liegt vielleicht am g++
ich arbeite durchweg NUR mit g++ wegen iostream und ein oder zwei C++ libs.
der code compiliert aber bei mir auch mit g++
Versuch mal, ob sich dieser Code compilieren lässt:
http://www.mindstormsforum.de/viewtopic.php?f=78&t=8689&p=67907#p67815
hirnfrei
05.05.2016, 20:43
Okay, habs gefunden. Offensichtlich hatte sich der Pfad nicht in dem Terminal aktualisiert. hab mich mit ssh ausgeloggt dann wieder eingeloggt jetzt gehts prima!
hirnfrei
10.05.2016, 14:42
Mal eine kurze Frage, sind die GPIOs bei allen Raspis gleich?
piggituX
10.05.2016, 20:07
bitteschön ;-)
https://www.raspberrypi.org/documentation/usage/gpio/
B+ , Pi2 und P3 haben ein paar mehr, wenn du nach Bildern zu GPIO im Internet suchst findest du eine Menge Hinweise, incl. einer Tabelle GPIO -> Wiring PI
cYa
hirnfrei
10.05.2016, 20:22
Japp habe ich schon gefunden. War auf der Seite von raspberrypi.org etwas verwirrt, hatte es dann aber doch gefunden.
Danke!
hirnfrei
11.05.2016, 07:40
Ich bin gerade ein wenig verwirrt.
Ich habe es jetzt sowohl über UART (mit dem Spannungsteiler laut HaWe) wie auch über USB versucht. Dabei bin ich wie hier beschrieben (http://www.einplatinencomputer.com/raspberry-pi-uart-senden-und-empfangen-in-c/) vor gegangen. Das Öffnen der Schnittstelle scheint offensichtlich problemlos zu funktionieren, senden und empfangen hingegen will nicht klappen. Dabei setze ich einen Arduino Mega ein, der Serial1 benutzt, es wird also keine SoftwareSerial, oder ähnliches verwendet. Dabei initialisiere ich Serial1 mit 115200 Baud.
Hast du meinen Code einmal probeweise verwendet? Der funktioniert ja nachweislich.
Wenn er bei dir aber auch nicht funktioniert, kann es nur an deinem Raspi oder Arduino Setup oder der Verkabelung etc. liegen.
Wenn mein Code bei dir aber doch funktioniert, kann es nur an deinem eigenen Kommunikationsprogramm liegen.
hirnfrei
11.05.2016, 13:23
Ja habe ich und nein es funktioniert auch nicht.
Die Verkabelung schliesse ich mal aus, da zum Beispiel das USB Kabel ja funktionieren müsste. Zumindest kann ich damit über die Arduino IDE auf den Mega zu greifen.
OK, schade, dann kann ich dir nicht weiterhelfen.
Mein setup funktioniert mit WiringPi, wiringSerial, UART, USB, USB-zu-serial-zu-BT usw. einwandfrei, wenn man alles Schritt für Schritt 100% genauso macht wie ich es beschrieben habe, denn ich habe mein System ja, wie gesagt, bereits öfter mal wieder neu aufgesetzt, genau immer nach dieser Vorgehensweise.
Da muss jetzt jemand anders ran... :-/
hirnfrei
11.05.2016, 19:02
Ich habe auch gesehen das es ein Update vom Rasbian gibt Ich denke ich mache das mal auf eine andere Karte und dann nochmal Alles von Anfang.
ja,
deswegen steht ja auch bei mir vor JEDER Neu- oder Zusatzinstallation:
sudo apt-get update
sudo apt-get upgrade
sudo reboot
wie gesagt, immer alles Schritt für Schritt, nichts zwischendrin auslassen / überspringen
;)
hirnfrei
11.05.2016, 23:52
Es passt aber für den Raspi 3 nicht mehr richtig. Wie ich nun raus gefunden habe ist UART beim Raspi 3 ttyS0, nicht mehr ttyAMA0. Da fängt es schon an. Siehe da, auf einmal kommen keine Fehlermeldungen mehr beim Senden und empfangen, jedoch kommen auch keine Daten an ;).
Da habe ich wohl noch ein wenig zu tüfteln.
- - - Aktualisiert - - -
Der USB Anschluss ist übrigens ttyACM0!
- - - Aktualisiert - - -
So, noch etwas rum probieren und schon findet man eine Lösung!
Das ganze Problem ist offensichtlich aktuell noch das Bluetooth. Offensichtlich stört das UART. Warum auch immer.
Baut man jedoch in die /boot/config.txt folgende Zeile ein:
dtoverlay=pi3-disable-bt
wird Bluetooth deaktiviert und UART wird wieder unter ttyAMA0 ansprechbar.
Im übrigen, /etc/inittab gibt es auf dem Raspi 3 nicht mehr! Bzw. ab Raspbian Jessie. Da dieses auf systemd umgestellt wurde.
das ist ja blöde, dass da der Pi 3 nicht mehr abwärtskompatibel ist. Ich nutze in der Tat ausschließlich Pi 2, die sind allerdings B+ abwärtskompatibel, was UART und I2C angeht.
hirnfrei
12.05.2016, 18:20
Ja gut, wenn man es weiss ist es ja okay. Finde es etwas merkwürdig das man das so hinten rum herausfindet. Erst muss man raus finden das es nicht mehr ttyAMA0 ist sondern S0 und dann, um zu wissen wie man das dann auch aktivieren kann, sieht man das man BT ausschalten muss und dann ist S0 wieder AMA0. Vielleicht komme ich auch mit der Seite nicht zurecht, aber ich finde die Dokumentation etwas schwach.
Aber gut, jetzt bringe ich dem Pi mal bei über den Arduino den Zustand der Akkus zu erfragen. Wenn ich es dann irgendwann noch schaffe ein Mikrofon an den Arduino zu klemmen um Geräusche analysieren zu können wird es lustig ;)
Aber gut, jetzt bringe ich dem Pi mal bei über den Arduino den Zustand der Akkus zu erfragen.
das ist das nächste, was ich auch unbedingt machen muss...
Habe festgestellt, dass meine 12V/5V- DC/DC Wandler immerhin noch bis runter auf 7V ausreichend 5V Power für Raspi und HDMI TFT liefern, aber bei 9V wollte ich eigentlich den Saft abdrehen, dazu Raspi Programm beenden und Raspi per system cmd ("sudo shutdown") automatisch runterfahren.
http://www.electroschematics.com/9351/arduino-digital-voltmeter/
ps,
Geräusche analysieren geht mit dem Lego Geräuschsensor - oder ähnlichem:
http://www.mindstormsforum.de/viewtopic.php?f=78&t=8491&start=15#p67546
(runter scrollen)
Geräusche habe ich damit schon mal hier analysiert:
http://www.mindstormsforum.de/viewtopic.php?f=70&t=6386
allerdings sind sie sehr empfindlich gegen Fremdgeräusche, z.B. laute Motoren.... ;)
immerhin wird der Raspi (oder auch der Arduino) aber viel schneller sein in der Rhythmusanalyse als der NXT mit Bytecodeinterpreter.... 8-)
hirnfrei
12.05.2016, 19:44
Das Überwachen finde ich jetzt nicht so sonderlich schwer. Derzeit habe ich 3 18650er Akkus dran. Die werden in Reihe geschaltet und gehen an einen DC-DC Wandler und von dort in den Raspi. Zusammen schalte ich die nicht im Pack sondern erst auf einem Bord. Dort greift dann der Arduino an Spannungsteilern die Spannung ab. klappt ganz gut finde ich.
Ich muss mal noch schauen wie ich die Akkus auch wieder laden kann. Wenn der Robi irgendwann mal aktiv ist würde ich den gerne über eine Induktionsplatte laden. Nur Akkus balanciert laden da steige ich noch nicht so ganz durch. Denn wenn ich die Akkus ja schon in Reihe habe, da müsste ich dann ja für jede Zelle ein eigenes Ladegerät haben.
peterfido
14.05.2016, 10:18
Hallo,
evtl. laufen die 'alten' Programme, wenn man einen Hardlink erstellt.?. Das kann ich mangels Pi3 nicht testen.
das würde mich auch brennend interessieren, spätestens wenn ich mal nen Pi 3 haben sollte.
Andernfalls müsste man umständlich die ganzen Pfade etc. case-sensitiv setzen, in der Art
#ifdef __PI3__ // oder andere Konstante
// devtree settings
// und der ganze Rest für Pi 3
#else
// devtree settings
// und der ganze Rest für Pi B+ und 2
#endif
wschl kann ja der Pi selber seine Hardwarebasis feststellen, das müsste dann statt __PI3__ entsprechend eingesetzt werden.
Wäre sicher ne Frage im Raspi.org Forum wert.
hirnfrei
14.05.2016, 19:27
Wie gesagt, offiziell ist UART erst auf ttyS0 eingestellt. Aber da es da anscheinend Probleme wegen Bluetooth gibt muss man Bluetooth deaktivieren (ob das ganze oder nur das Bluetooth bei den GPIOs weiss ich nicht). Durch das Deaktivieren wird UART wieder zu ttyAMA0.
Also dürfte sich da ja eigentlich nichts ändern?
Im Übrigen, wenn ich wireingPi verwende muss ich mein Programm mit sudo starten. Kann man das umgehen?
- - - Aktualisiert - - -
Läuft mein Raspi eigentlich unter Sparflamme oder warum zieht der nur 0,16 bis maximal 0,25 (beim Compilieren) an Strom?
Im Übrigen, wenn ich wireingPi verwende muss ich mein Programm mit sudo starten. Kann man das umgehen?
verstehe ich auch nicht, die Beschreibung macht mich völlig konfus.
edit,
Gordon Henderson schriebs mir gerade:
https://www.raspberrypi.org/forums/viewtopic.php?f=33&t=148158&p=974705#p974702
Without sudo you can not use PWM, nor can you control the internal pull-up/down resistors. (This may have changed, but no-ones told me)
To make wiringPi use non-root access you need to set the enviroment variable.
As of kernels 4.1.7, a user-level GPIO access mechanism is available,
however wiringPi will not use this by default - because at this time
there appears to be issues when trying to program the PWM or clock out‐
put hardware. If you can live without PWM or GPIO clocks and you want
to use the GPIO from a non-root program, then you need to make sure
that the module bcm2835_gpiomem is loaded at boot time. This should
happen automatically when you enable the device tree in raspi-config.
You may also need some additional information in /etc/udev/rules.d/ to
change the mode and ownership of the /dev/gpiomem file. Finally, you
need to set the environment variable WIRINGPI_GPIOMEM. This will go-
away in future releases once the /dev/gpiomem interface is fully opera‐
tional.
hirnfrei
14.05.2016, 22:27
Das verstehe ich auch irgendwie nicht. Ist sehr verwirrend.
Letzten Endes ist es keine dramatische Sache. Benutze ich eben sudo oder melde mich als Root an. Auf dem Raspi sind keine sensiblen Daten die mir jemand klauen könnte. Komisch ist es dennoch.
ich auch nicht, aber nachdem man sudo sowieso für pwm und pullups/downs braucht, komme ich eh nicht drum rum.
peterfido
15.05.2016, 10:46
Hallo,
der gewünschte User (Pi) muss den jeweiligen Gruppen zugeordnet sein. Welche das sind, hängt dann wieder vom Einsatzzweck ab. Habe ich irgendwo (https://www.roboternetz.de/community/threads/68967-File-Manger-f%C3%BCr-Raspbian-Jessie-%28GUI%29?p=625120&viewfull=1#post625120) auch schon Mal erwähnt.
mact mich persönlich aber jetzt nicht wirklich schlauer, was genau ich mit welchen exakten Einzelschritten unternehmen müsste, um wiringPi OHNE sudo benutzen zu können.
also:
1. ?
2. ?
3. ?
4. ?
5. ?
...?
peterfido
15.05.2016, 11:14
Hallo,
die Befehle stehen im oben verlinkten Post. Welche Du genau brauchst, kann ich nicht pauschal sagen. Hängt von den installierten und genutzten Paketen ab. Da gibt es zu viele Möglichkeiten, um alle zu kennen. Am besten Du listet die möglichen Gruppen
cat /etc/group
auf und fügst den User Pi nach und nach den Gruppen zu. Zwischendurch immer testen.
Mit gpio und der seriellen Schnittstelle (dialout) würde ich Anfangen.
sudo usermod -aG gpio pi
sudo usermod -aG dialout pi
Alles natürlich auf der Shell eingeben.
Ohne sudo nutzen zu müssen, geht natürlich root am einfachsten. Wenn Du den user Pi aber da hinzufügst, kannst Du Dich gleich als root anmelden.
nein, das muss anders gehen, iwas mit Umgebungsvariablen hat Gordon mal erwähnt. Ansonsten gehört der Standarduser pi bei NOOBS immer zur selben Gruppe (welche, weiß ich aber auch nicht, ich hasse diese ganze Linuxgruppendynamik). Man kann aber als ersten Lösungsansatz mal vom StandardnutzerPi ausgehen.
aber ist ja eigentlich auch egal, besser wär es eh, wenn dieser ganze Sudomist mal iwann für GPIOs und pwm aufgehoben wird.
ps, edit:
...
(@GordonHenderson: ) I simply don't understand your plan what exact to do, not in a prosaic style but in a short to-do-list :
1. ?
2. ?
3. ?
4. ?
5. ?
...?
maybe one could wrap that into a bash file, to be started manually in case of wish or need.
Not for me just in that moment right now, compellingly, but just because of general reasons, and because many (i.e., especially non-native English speakers) don't understand what to do
- but anyway, IMO it would be finally even more better if one could abandon all that cryptic command and adjustment stuff in the moment when one was eventually able to use GPIO pullups and pwm as a standard user at either time.
0. #include <stdlib.h>
1. main () ... {
2. putenv ("WIRINGPI_GPIOMEM=1") ;
3. wiringPiSetup () ;
4. ...
-Gordon
das sieht doch schon ganz anders aus, vlt hilft es ja.... 8-)
... pps:
But thank you, I'll forward your post to the original questioner in a different forum!
And remind them that I only read this forum occasionally as lifes too short to read the world, so if they want support then they should use email...
-Gordon
yes, I'll do! :)
peterfido
15.05.2016, 12:22
Hallo,
es führen mehrere Wege nach Rom. So pauschal lasse ich Dein 'nein' nicht gelten, bis es jemand getestet hat. Für Dich ist es evtl. inakzeptabel, für andere wiederum eine ausreichende Lösung. Zumal die Gruppenzugehörigkeit einen Neustart überlebt und die Umgebungsvariable jedesmal neu gesetzt werden muss. In Deinem Beispiel ist diese darüber hinaus fest im Programmcode verankert. Ändert sich die Variable irgendwann mal (wie z.B. ttyAMA0 beim Pi 3, dann funktioniert das Programm nicht mehr.
Ob die Umgebungsvariable immer ausreicht, ist mir nicht bekannt (nie probiert). Probier es am besten aus und teile uns Deine Erkenntnisse mit. Evtl. reicht es, wenn
export WIRINGPI_GPIOMEM=1 vor dem gewünschten Programm ausgeführt wird.
Ansonsten gibt es keine Benutzergruppen in dem Sinne. Da kann ein Benutzer halt zu verschiedenen Gruppen gehören. Sozusagen mehrere Schlüssel erhalten. Einen für Standard-Sachen und einige für 'besondere' Türen (Aufgaben). Ich selbst mache alles bis auf Webserver unter root.
Edit:
Bei einem meiner PIs gibt es folgende Gruppen:
root@Raspi6V2:~# cat /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:pi
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:pi
fax:x:21:
voice:x:22:
cdrom:x:24:pi
floppy:x:25:
tape:x:26:
sudo:x:27:pi
audio:x:29:pi
dip:x:30:
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:pi
sasl:x:45:
plugdev:x:46:pi
staff:x:50:
games:x:60:pi
users:x:100:pi
nogroup:x:65534:
libuuid:x:101:
crontab:x:102:
pi:x:1000:
ssh:x:103:
ntp:x:104:
netdev:x:105:pi
input:x:999:pi
messagebus:x:106:
lpadmin:x:107:
fuse:x:108:
lightdm:x:109:
indiecity:x:1001:root
spi:x:1002:pi
gpio:x:1003:pi
ftp:x:110:
i2c:x:111:pi,root
root@Raspi6V2:~#
Da würde ich dann tty, dialout, audio, spi, gpio und i2c wählen, wo ich den user Pi hinzufüge, wenn noch nicht vorhanden.
sudo usermod -aG gpio pi
sudo usermod -aG dialout pi
sudo usermod -aG tty pi
sudo usermod -aG spi pi
sudo usermod -aG i2c pi
das "nein, das muss anders gehen" bezog sich ausschließlich auf den von Gordon selber vorgeschlagenen Weg für seine WiringPi libs.
Er hatte es früher schon einmal erwähnt, dass man nur eine Environment Variable setzen muss, aber für mich nicht verständlich.
Jetzt, so wie er es dann auf meine Frage oben erklärt hat, ist es aber einfach - es ist ja genau der Weg, den er selber dafür in seinem letzten Release dafür implementiert hat, und nur das hatte ich gesucht.
0. #include <stdlib.h>
1. main () ... {
2. putenv ("WIRINGPI_GPIOMEM=1") ;
3. wiringPiSetup () ;
4. ...
Klar mag es darüber hinaus auch noch andere Wege geben, nur die hatte ich nicht im Sinn.
Außerdem gilt ja immer noch die Einschränkung für die PUDs, die man nach wie vor nur per sudo nutzen kann, und genau die brauche ich ja auch ständig.
Möglicherweise hilft es aber anderen.
hirnfrei
15.05.2016, 23:52
Bevor ich jetzt anfange vom Arduino aus Signale an die Pins vom Raspi zu schicken nochmal zur Sicherheit.
Ich muss vom Arduino aus einen Spannungsteiler zwischen schalten, bevor ich den Raspi zerlege.
exakt!
http://www.mindstormsforum.de/viewtopic.php?f=78&t=8689&p=67907#p67813
heißt also, du hast demnach also doch noch nicht meinen Code probiert, denn dazu hättest du ja bereits den Spannungsteiler benutzen müssen...??
hirnfrei
16.05.2016, 00:24
Meine Schaltung hat einen Spannungsteiler. Von Arduino TX an Raspi RX. Wollte nur noch mal sicher gehen ob es bei den normalen GPIOs auch so ist. Nachfragen kostet ja nichts.
alle Ausgänge, die vom Arduino aus schreiben, geben 5V Level ab, brauchen also einen Spannungsteiler oder Levelshifter.
Alle Arduino-Pins, die nur lesen, müssen mit den 3.3V vom Raspi klar kommen, brauchen also nicht zwingend immer einen Levelshifter, das kommt auf den Einzelfall an.
Daher hat mein Schaltbild auch nur Widerstände am Raspi-UART-Eingang, d.h. an Raspi-RX (weiß).
peterfido
16.05.2016, 07:54
Hallo,
die Gefahr besteht, wenn man einen Fehler im ARDUINO-Code hat und einen vermeintlichen Eingang aus Versehen als Ausgang setzt oder Pullups einschaltet. Diese Schaltung (http://rn-wissen.de/wiki/index.php/Raspberry_PI:_Internetradio) funktioniert bei mir zuverslässig, wenn ich mal keinen 4er Pegelwandler (http://www.amazon.de/SparkFun-bi-direktionaler-Pegelwandler-Logic-Converter/dp/B00M7U5DV2?ie=UTF8&keywords=pegelwandler&qid=1463378000&ref_=sr_1_4&sr=8-4) einsetzen möchte, welche ich zuverlässig für ISP Raspi<>AVR nutze.
klar, fail-safe ist es aber nie bei eigenen Basteleien.
Genau wie man Pins verwechseln kann, kann man auch einen Levelshifter falsch rum anschließen - gibt ebenfallls Magic Smoke.
Aber wenn mans richtig macht, funktionierts.
Das eine ist halt Theorie, das andere Praxis, und wenn man nicht aufpasst, passiert evt nichts Gutes.
Ist fast wie mit dem Unterschied zwischen Theorie und Praxis des Dialektischen Materialismus:
Das eine ist Marx,
das andere ist Murks. :D
peterfido
16.05.2016, 11:16
Hallo,
nachdem ich mal einen Raspi außer Gefecht gesetzt habe, messe ich vor dem Einschalten mehrmals nach. ;)
hirnfrei
16.05.2016, 15:31
Ja messen tue ich auch immer und lieber einmal mehr nachgefragt wie einmal geschrottet ;). Kommt also sicher noch öfters vor das ich was Frage was eigentlich schon klar sein sollte, wenns um das Leben meines Raspis geht. Arduinos habe ich einige, aber nur einen Raspi.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.