Communicatie Arduino <=> Raspberry PI(s)

Heel algemeen loop ik te bomen (dus nog niet te plannen) op een project waarin een Raspberry, en later wellicht meerdere, moet communiceren met een Arduino. Welke Arduino maakt voorlopig niet zoveel uit, een Nano is me het meest vertrouwd maar dat is bijkomstig.

Er hoeft niet veel informatie te worden uitgewisseld, en niet al te frekwent. Zeg maar elke seconde een pakketje van enkele tientallen bytes, hooguit.

Kan dit over de I2C? Is er ergens een voorbeeld van zo'n opzet? Andere ideetjes?

hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord

Ik ben niet erg bekend met de Rasp. Maar die zal toch minimaal wel een UART hebben?

I2C is leuk als ze allemaal in dezelfde kast zitten. Anders niet aan beginnnen.

Ik zou zelf voor RS232 of RS485 gaan. Eventueel met een simpel chinees USB-RSxxx omzettertje voor de Pi.

Mooie van RS485 is dat je ook meerdere devices aan een kabel kunt hangen. Moet je alleen zelf iets verzinnen voor als ze door elkaar praten.

I2C kan, dan moeten beiden wel multi-master mode ondersteunen (indien er tweezijdig moet kunnen worden verzonden).
Als 't maar 1 kant op is dan kan master-slave met I2C...

Bitrate neemt af met de afstand. Met lage bitrate kun je wel 1 mijl halen... ;)

[Bericht gewijzigd door Arco op 1 april 2019 21:04:17 (19%)]

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com

Ik stel me zo ongeveer voor dat de Arduino een soort master is, die ofwel een soort commando kan uitsturen ("ga jij maar eens lekker shutdownen") of ook wel kan pollen ("wat mag daar zoal de status zijn?") Maar nogmaals, het is allemaal nog erg vaag.

En de afstand is geen punt: het zou allemaal in een enkele (grote) blikken doos moeten komen. Mocht ik wel eens gelijk gezegd hebben, excuus.

[Bericht gewijzigd door big_fat_mama op 1 april 2019 21:14:23 (22%)]

hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord

Als de Arduino i2c master is, dan kan de Rpi slave zijn (indien dat ondersteund wordt)
(Arduino initieert dan de verbinding, en de Rpi geeft antwoord...)

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com
Sjoerd Kreyns

Golden Member

Of gewoon allemaal via het netwerk. Voor de Nano zijn ook shields verkrijgbaar. Zo heb ikeen Uno met een ethernetshield en een ds18b20 naar een database op een lichtkrant via een php pagina.

SMD weerstandjes zoeken in grijze vloerbedekking is ook een uitdaging ... 8*1=255 ... Het nadeel van ruimte: Als je het hebt, staat het binnen de kortste keren weer vol.

Klinkt mij toch meer als UART. De I2C periferal van RPi is een master, nooit gehoord dat je 'm ook als slave kunt gebruiken als zegt dat niet alles.

Ietsje meer afstand: waarom moet het vanuit een extra micro gebeuren? Kan het niet gewoon door een script op de RPi zelf? Een extra controller naast zo'n "beest" klinkt mij als overkill.

nav Sjoerd hierboven: ja draadloos kan ook, pak dan een ESP8266 oid. Communiceren via MQTT.

[Bericht gewijzigd door flipflop op 1 april 2019 21:26:59 (12%)]

"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein

Ethernet zou kunnen, maar ik wil het liever vermijden wegens
* complex
* stroomverbruik
* niet echt nodig

En draadloos is al helemaal niet aan de orde, vermits het allemaal in één doos komt te zitten.

En jawel, het zou misschien allemaal vanuit de Raspi kunnen gebeuren, toch zeker zolang het maar een enkele is; maar er komt (beperkte) A/D-omzetting bij kijken, en dan is een Arduino het goedkoopst, en nog eenvoudig in te zetten bovendien. Het is misschien wel een beetje overkill, ja, maar zo mag je niet meer denken in de 21ste eeuw :)

Dankzij de (als gewoonlijk) snelle en vruchtbare duscussie lijkt mijn vraag dus uitgekristalliseerd tot "Kun je een Raspi als I2C slave configureren/bedrijven?"

[Bericht gewijzigd door big_fat_mama op 1 april 2019 21:33:03 (13%)]

hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord

Ik zou de vraag veranderen in: "Kun je met een RPi via I2C een ADC uitlezen?". Antwoord is "ja, makkelijk". ADC boardjes koop je voor een prikkie. Uitlezen is ook niet moeilijk, klein Python scriptje dat bij opstarten gestart wordt. Zo start je een hele berg scriptjes op die verschillende taken hebben.
Je moet oplossingen altijd zo elegant mogelijk maken, ook al is een extra Arduino boardje niet duur. My 2 cents.

"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein

Hm, dat is (voor mij) een heel andere insteek. Toch maar eens proberen: ik heb bij Ome Ali een bordje met PCF8591 besteld. Vervolg over enkele weken...

hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord

Ik zou gewoon voor 5V UART gaan, dat is over het algemeen nog minder complex dan I2C

Meep! Meep!

Ik adviseer je ook om de ADC direct aan de RPI te knopen. Het wordt een ander verhaal wanneer de timing belangrijk is en de RPI duizend-en-één andere taken aan het uitvoeren is, maar zo klinkt het op dit moment niet.

Mocht je alsnog de mogelijkheid wensen om de RPI via een Arduino veilig af te sluiten, dan zou je zoiets kunnen proberen: https://www.instructables.com/id/Simple-Raspberry-Pi-Shutdown-Button/

In plaats van een knopje, gebruik je dan simpelweg een transistor om de betreffende pin met de GND te verbinden.

Magnetische flux loopt altijd in gesloten paden, elektrische stroom niet per se (volgens de wet van Ampère), want: elektrische lading kan ophopen.

Ik heb thuis een raspberry pi staan waarmee ik de buitentemperatuur log.
Ik lees de sensor uit en schrijf deze weg naar een sql database.
De sensor lees ik direct uit via I²C.
Het is geprogrammeerd in Basic4Java, een heel eenvoudige omgeving om voor raspberry te programmeren. Ik heb een console applicatie gemaakt.
Het project om de sensor uit te lezen (zonder de verbinding met de database) staat op mijn site: https://tdcbyte.be/MCP9808.html

Programmeertool: https://www.b4x.com/b4j.html

Meestal zijn 2 controllers overbodig, en kan eentje het ook prima aan. (met meerdere krijg je er weer extra taak bij: communicatie tussen de CPU's)
(Een Rpi is vaak ook totale overkill, een simpel controllertje kan de meeste taken ook fluitend uitvoeren...)

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com