Stap 9: Seriële communicatie
Om de controller van de huisdier deur communiceren met de OpenWrt router die moet u de controleur TX pin verbinden met de router RX pin en de controleur GND met router de GND (In onze situatie die de mededeling unidirectioneel, vanaf de domeincontroller naar de router is).Eerst en vooral, commentaar (Voeg # voor hen) de regels in/etc/inittab:
TTS/0::askfirst: / bin/ash--login
ttyS0::askfirst: / bin/ash--login
tty1::askfirst: / bin/ash--login
Hiermee wordt het login console terminal op de seriële poort uitgeschakeld, zodat we het kunnen gebruiken voor heen en weer-communicatie met de arduino gebaseerde controller.
Zowel de seriële poort van de router en de seriële poort van de controleur moet dezelfde snelheid te kunnen communiceren. Van de router seriële snelheid die is ingesteld om 9600 door uit te voeren:
wortel stty 9600 < /dev/tts/0
Voor elke RFID-tag die wordt gelezen door de huisdier dor-controller, zal de controller schrijven naar de vervolgverhaal de RFID-tag met .txt aan het einde van de lijn, bijvoorbeeld, als de tag is 01068E2081, de pet ging de deur (het breken van de IR-straal), gaat de controller om te schrijven naar de seriële 01068E2081-out.txt en als het huisdier ging in de deur (deur geopend door de RFID-tag) , de controller gaat verzenden via de seriële 01068E2081-in.txt
Op de router om te lezen wat over seriële communicatie afkomstig van de controller, uw code moet als volgt uitzien:
# Vertellen de AVR dat we klaar om te beginnen met het doen van dingen
echo "start" > /dev/tts/0
terwijl true # continu herhalen
doen
inputline = "" # Schakel input
# Loop totdat we een geldige opdracht van arduino krijgen
# de regel moet het tekstbestand dat we moet openen om te krijgen
# een willekeurig bericht
tot inputline = $($inputline aansluiten | grep -e ".txt")
doen
inputline = $(hoofd - n 1 < /dev/tts/0)
gedaan
[...]
door op zoek naar .txt zullen we weten wanneer we een nieuwe opdracht van het huisdier deur-controller.
Nadat we een nieuwe opdracht, bijvoorbeeld 01068E2081-out.txt, gaan we een willekeurige regel in het bestand met dezelfde naam te lezen:
LIJNEN = "wc -l $inputline | awk ' {afdrukken ($inputline + 1)}''
RANDSEED =' datum ' + %S %M % ik ''
LIJN =' kat $inputline | awk - v COUNT = $LINES - v zaad = $RANDSEED ' BEGIN {srand(SEED); i=int(rand()*COUNT)} FNR == ik {print $0}''
Neem een foto van de Webcam:
ln -s /dev/v4l/video1/dev/video1 # Maak /dev/video1
spcacat -d/dev/video1 -g -f jpg -p 10000 -o >/dev/zero # Neem een foto elke 3 sec
en upload ze naar twitter (twitpic):
# vertellen curl een meerdelige formulier verzenden naar twitpic
# opslaan geretourneerde XML in een variabele
RET = $(curl -s -S -F "$myname" -F "$pword" -F "$cargo" -F "$tweet" $target)
echo "$RET"
Opmerking: In dit project de mededeling is slechts één manier, de OpenWrt router alleen berichten van arduino gebaseerd controller ontvangt. Als u communiceren beide manieren, in de bash-script op het gebruik van de router na opdracht om berichten te verzenden naar de arduino gebaseerd conntroller wilt:
echo "testbericht verzonden vanaf OpenWrt router naar arduino" > /dev/tts/0