Zuerst die benötigten Ordner anlegen – da sich dieser nicht mehr im eigenen Home-Bereich befindet, muss man „sudo“ verwenden!
sudo mkdir /var/www/html/fotoresistor
sudo mkdir /var/www/html/fotoresistor/daten
Damit der Raspi die Werte des Arduino einlesen kann, werden zwei Python-Scripte benötigt:
Das Script serial_arduino_to_pi.py liest die Werte, die vom Arduino kommen, alle 60sek ein und speichert diese als CSV im Ordner /var/www/html/fotoresistor/daten
serial_arduino_to_pi.py
#!/user/bin/env python
# -*- coding: UTF-8 -*-
# https://classes.engineering.wustl.edu/ese205/core/index.php?title=Serial_Communication_between_Raspberry_Pi_%26_Arduino
# wird via sudo crontab -e direkt bei jedem Neustart aktiviert
# @reboot /usr/bin/python /home/pi/bin/serial_arduino_to_pi.py
import os
import time
from time import sleep
from datetime import datetime
import serial
# hier richtigen Serial-Port des Arduinos angeben!
# Arduino Uno
port = "/dev/ttyACM0"
# Achtung, hier die richtige Bautrate fuer den Arduino eintragen
ser = serial.Serial(port, 9600)
ser.flushInput()
# pfad zum HTML-Ordner
pfadDatei = "/var/www/html/fotoresistor/daten/data_log.csv"
# Geschwindigkeit muss identisch wie bei Arduino-Script sein!
s1 = serial.Serial(port,9600)
s1.flushInput()
file = open(pfadDatei, "a")
while True:
if s1.inWaiting()>0:
# formatierte Datum- und Zeit-Kombination
now = datetime.now().strftime('%Y-%m-%d,%H:%M:%S')
# gibt den Helligkeiswert jeweil in einer Zeile aus
inputValue =s1.readline()
# "\r" geht, macht aber eigenartiges Sonderzeichen auf naechster Zeile!
# "\n" macht jeweils eine Leerzeile
file.write(str(now)+","+inputValue+"\n")
file.flush()
# Script wartet 1 Minute (60), bis es sich wiederholt
time.sleep(60)
file.close()
serial_arduino_auffordern.py
#!/user/bin/env python
# -*- coding: UTF-8 -*-
# https://classes.engineering.wustl.edu/ese205/core/index.php?title=Serial_Communication_between_Raspberry_Pi_%26_Arduino
# wird via sudo crontab -e aktiviert
# fordert den Arduino z.B. jede 15 Minute auf, Werte zu schicken
# einfach hier die gewuenschten Zeitabstaende einstellen (kuerzestes Interval 1min),
# es muss NICHTS in den Python- oder Arduino-Scripts geaendert werden
# */15 * * * * /usr/bin/python /home/pi/bin/Serial_arduino_auffordern.py
import serial
import sys
# Achtung, hier den richtigen Port fuer den Arduino eintragen
ser = serial.Serial('/dev/ttyACM0', 9600)
ser.flushInput()
# das Python-Script verschickt via SerialPort nur den Buchstaben "A"
# auf dem Arduino wird dieses ausgelesen und nur dann eine Messung von Temp und Feuchtigkeit
# an den Raspi geschickt
string1 = "A"
string1_encode = string1.encode()
ser.write(string1_encode)
sys.exit()
Wenn das Interval für das Script „serial_arduino_auffordern.py“ länger (z.B. 15min) ist, spielt das keine Rolle.
Aufgabe
Erstellt die beiden oben gezeigten Python-Scripte auf dem Raspi unter home/pi/bin und macht diese ausführbar
sudo chmod 755 serial_arduino_to_pi.py && sudo chmod 755 serial_arduino_auffordern.py
Arduino wird nicht gefunden
In den Python-Scripten muss ja angegeben werden, an welchem Port der Arduino angesprochen werden soll. Falls Ihr keine Werte übertragen bekommt, müsst Ihr testen, ob der richtige Port verwendet wird:
Abfragen, ob Arduino erkannt wird:
Da sollte in einer Zeile etwas mit „Arduino“ vorkommen, dann wird er schon mal erkannt!
lsusb
Abfragen, an welchem Port der Arduino angeschlossen ist:
Dazu folgenden Befehl einmal mit angeschlossenem Arduino ausführen und einmal ohne – in der Ausgabe sollte dadurch ein Eintrag wegfallen – dieser ist dann der Port des Arduinos! Hier also der Port /dev/ttyACM0
ls /dev/tty*