Tweeting katt dörr (9 / 12 steg)
Steg 9: Seriell kommunikation
För att göra sällskapsdjur dörren controller kommunicera med OpenWrt routern måste du ansluta den registeransvarige TX pin till routerns RX stift och handkontrollens GND till routerns GND (i vår situation i meddelandet är ett sätt, från registeransvarige till routern).Först och främst kommentar (lägga till # framför dem) raderna i/etc/inittab:
TTS/0::askfirst: / bin/aska--login
ttyS0::askfirst: / bin/aska--login
tty1::askfirst: / bin/aska--login
Detta kommer att inaktivera logga in konsolen terminal på serieporten, så vi kan använda det för fram och tillbaka kommunikation med arduino baserad domänkontrollant.
Samma hastighet för att kunna kommunicera måste både routerns seriell port och handkontrollens seriell port. Routerns seriell hastighet till är inställd på 9600 genom att köra:
roten stty 9600 < /dev/tts/0
För varje RFID-tagg läses av sällskapsdjur dor controller, styrenheten kommer att skriva till följetongen RFID-taggen med .txt i slutet av linjen, till exempel om etiketten är 01068E2081, och sällskapsdjuret gick ut dörren (bryta strålen IR) styrenheten kommer att skriva till den seriella 01068E2081-out.txt och om sällskapsdjuret gick i dörren (dörren öppnas av RFID-etiketten) , registeransvarige kommer att skicka över den seriella 01068E2081-in.txt
På routern, för att läsa vad som kommer över seriell kommunikation från registeransvarige, din kod bör se ut ungefär så här:
# Berätta AVR är vi redo att börja göra saker
ECHO "start" > /dev/tts/0
medan true # loop för evigt
göra
inputline = "" # Rensa ingång
# Loop tills vi får ett giltigt kommando från arduino
# raden bör vara den textfil som vi måste öppna för att få
# ett slumpmässigt meddelande
fram till inputline = $(eko $inputline | grep -e ".txt")
göra
inputline = $(huvud - n 1 < /dev/tts/0)
gjort
[...]
genom att leta .txt vet vi när vi fick ett nytt kommando från sällskapsdjur dörren controller.
Efter att vi fick ett nytt kommando, till exempel 01068E2081-out.txt, ska vi läsa en slumpmässig rad från filen med samma namn:
RADER = "wc -l $inputline | awk "{skriva ut ($inputline + 1)}''
RANDSEED = "datum" + %S %M % jag ''
LINJE = "cat $inputline | awk - v COUNT = $LINES - v frö = $RANDSEED ' börja {srand(SEED); i=int(rand()*COUNT)} Bildrutnr == jag {print $0}''
ta en bild från webbkameran:
ln -s /dev/v4l/video1/dev/video1 # skapa /dev/video1
spcacat -d/dev/video1 -g -f jpg -p 10000 -o >/dev/zero # ta en bild varje 3 SEK
och ladda upp dem till twitter (twitpic):
# berätta curl att skicka en flerdelade form till twitpic
# rädda returnerade XML i en variabel
RET = $(curl -s -S -F "$myname" -F "$pword" -F "$cargo" -F "$tweet" $target)
ECHO "$RET"
Obs: I detta projekt i meddelandet är bara ett sätt, OpenWrt routern tar emot bara meddelanden från arduino baserade registeransvarige. Om du vill kommunicera båda sätten, i din bash-script på routern Använd följande kommando för att skicka meddelanden till arduino baserad conntroller:
echo "testmeddelande skickas från OpenWrt router till arduino" > /dev/tts/0