Raspberry Pi Smart doel (4 / 6 stap)

Stap 4: Code


De Raspberry Pi draait "headless" zin, er geen behoefte is aan een monitor, toetsenbord of muis.  Om te beginnen dingen automatisch zodra ik de RPI aangesloten, gebruikte ik een Linux init script (/ etc/init.d/target) om te beginnen met het Java-programma dat luistert voor actie en een programma afsluiten om te luisteren voor de shutdown knop. Het script toont ook het huidige IP-adres in het LCD-scherm tijdens het opstarten.

 #!/bin/bash #/etc/init.d/target export HOME case "$1" in start) if [ ! -e "/dev/ttyS1" ]; then ln /dev/ttyAMA0 /dev/ttyS1 fi /home/pi/lcd.py `ifconfig wlan2 | grep inet | awk '{print $2}' | sed 's/addr://'` java -cp .:/home/pi:/home/pi/lib/* Target >> /home/pi/target.log & /home/pi/shutdown-listener.py & ;; stop) LCD_PID=`ps auxwww | grep Target | head -1 | awk '{print $2}'` kill $LCD_PID ;; *) echo "Usage: /etc/init.d/target {start|stop}" exit 1 ;; esac exit 0 

Afsluitscript

 #!/usr/bin/env python from time import sleep import os import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) OFF_SWITCH = 23 GPIO.setup(OFF_SWITCH, GPIO.IN) while True: if ( GPIO.input(23) == False ): os.system('/home/pi/lcd.py " Shutting down. Goodbye :)"') os.system('shutdown -h now') break sleep(1); print 'Shutting down' 

LCD Python script rijden het ioBridge LCD-scherm

 #!/usr/bin/env python import serial import string import sys test=serial.Serial("/dev/ttyAMA0",9600) test.open() line = sys.argv[1] byte = chr(0xFE) try: test.write(byte) test.write("B") test.write("9") test.write(byte) test.write("Z") test.write(line) test.write(byte) test.write("T") test.write("0") delay = chr(0x10) test.write(delay) except KeyboardInterrupt: pass # do cleanup here test.close() 

Nu hier de bron van Java is. Opmerking dat mij ben using twiiter4j library en rpi-gpio-java (http://code.google.com/p/rpi-gpio-java/)

 import gnu.io.CommPortIdentifier; import gnu.io.SerialPort; import java.io.OutputStream; import be.doubleyouit.raspberry.gpio.Boardpin; import be.doubleyouit.raspberry.gpio.Direction; import be.doubleyouit.raspberry.gpio.GpioGateway; import be.doubleyouit.raspberry.gpio.impl.GpioGatewayImpl; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.text.SimpleDateFormat; import java.util.Date; import javax.activation.MimetypesFileTypeMap; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPut; import org.apache.http.entity.FileEntity; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import twitter4j.StatusUpdate; import twitter4j.Twitter; import twitter4j.TwitterException; import twitter4j.TwitterFactory; import twitter4j.conf.ConfigurationBuilder; import java.util.Random; public class Target { static OutputStream output; static GpioGateway gpio; static SerialPort port; static CommPortIdentifier portId; static HttpClient httpclient = new DefaultHttpClient(); static String replyURL; static String message; static boolean ready = true; static String dropcam = "https://nexusapi.dropcam.com/get_image?width=800&uuid=XXXX"; static String osnImg; public static Date now; static Random generator = new Random(); public static String[] messages = { "Lucky! Looks like you will be taking me home tonight!", "It paid off to stop by the OTN Lounge tonight.", "Looks like someone has been practicing.", "Not bad for your first try. Now go ahead and brag to your friends.", "I love hanging out at the OTN Lounge, but It looks like you will be taking me home tonight!", "That was nice. No go and tell your friends to stop by the OTN Lounge.", "I just love to scream and fly at the OTN Lounge.", "Roses are red and Oracle too. Now you can take me home too.", "I just wanna fly.", "Thanks for stopping by. Looks like you got lucky tonight.", "I just love to scream and fly at the OTN Lounge." }; public static void main(String[] args) throws Exception{ AddShutdownHookSample kill = new AddShutdownHookSample(); kill.attachShutDownHook(); try{ portId = CommPortIdentifier.getPortIdentifier("/dev/ttyS1"); port = (SerialPort)portId.open("Raspi LCD", 4000); output = port.getOutputStream(); port.setSerialPortParams(9600,SerialPort.DATABITS_8, SerialPort.STOPBITS_1,SerialPort.PARITY_NONE); gpio = new GpioGatewayImpl(); gpio.unexport(Boardpin.PIN11_GPIO17); gpio.export(Boardpin.PIN11_GPIO17); gpio.setDirection(Boardpin.PIN11_GPIO17, Direction.IN); while (true){ brightness("9"); clear(); print(" Ready "); delayBacklight("0",5); int i = 0; //remove negation! while (!gpio.getValue(Boardpin.PIN11_GPIO17)){ i = 1; } if (ready){ //System.out.println("start"); ready = false; int rnd = generator.nextInt(10); Process proc = Runtime.getRuntime().exec(new String[]{"/usr/bin/mpg321", "-q","/home/pi/"+rnd+".mp3"}); brightness("9"); clear(); print(" Congratulations"); //Login downloadPicture(); uploadPicture(messages[rnd]); clear(); delayBacklight("0",5); Thread.sleep(2 * 5000); ready = true; //System.out.println("end"); } } }catch (Exception e){ System.out.println(e.toString()); } } public static void downloadPicture() throws IOException{ now = new Date(); String formatDate = new SimpleDateFormat("MMddyyyy-hhmmss").format(now); osnImg = "OTN-" + formatDate + ".jpeg"; HttpGet httpget = new HttpGet(dropcam); HttpResponse response = httpclient.execute(httpget); HttpEntity entity = response.getEntity(); //System.out.println("downloadPicture: " +response.getStatusLine()); if (entity != null) { byte[] bytes = EntityUtils.toByteArray(entity); File file = new File("/var/www/" + osnImg); FileOutputStream fos = new FileOutputStream(file); fos.write(bytes); fos.close(); } EntityUtils.consume(entity); } public static void uploadPicture(String message) throws TwitterException { ConfigurationBuilder cb = new ConfigurationBuilder(); cb.setOAuthConsumerKey("XXXX"); cb.setOAuthConsumerSecret("XXXX"); cb.setOAuthAccessToken("XXXX"); cb.setOAuthAccessTokenSecret("XXXX"); StatusUpdate status = new StatusUpdate(message); File imageFile = new File ("/var/www/" + osnImg); status.setMedia(imageFile); TwitterFactory tf = new TwitterFactory(cb.build()); Twitter twitter = tf.getInstance(); try { twitter.updateStatus(status); } catch ( Exception ex ) { ex.printStackTrace(); } } public static void delayBacklight(String level, int delay ) throws Exception{ startCommand(); output.write("T".getBytes()); output.write(level.getBytes()); output.write(delay); } public static void brightness(String level) throws Exception{ startCommand(); output.write("B".getBytes()); output.write(level.getBytes()); } public static void print(String message) throws Exception{ output.write(message.getBytes()); } public static void clear() throws Exception{ startCommand(); output.write("C".getBytes()); } public static void startCommand() throws Exception{ output.write(254); } } //http://www.javabeat.net/2010/11/runtime-addshutdownhook/ class AddShutdownHookSample { void attachShutDownHook() { Runtime.getRuntime().addShutdownHook(new Thread() { public void run(){ try{ System.out.println("Shuting down target"); File file = new File("/var/lock/LCK..ttyS1"); Lcd.httpclient.getConnectionManager().shutdown(); if(file.delete()){ System.out.println(file.getName() + " is deleted!"); } }catch(Exception e){ e.printStackTrace(); } } }); //System.out.println("Shut Down Hook Attached."); } } 

Gerelateerde Artikelen

Draadloze kerst lichttimer met Raspberry Pi en Python

Draadloze kerst lichttimer met Raspberry Pi en Python

1/14/2014 Update: dank aan iedereen die gestemd voor dit project in de Hardware Hacking wedstrijd! Benieuwd naar mijn nieuwe maker-pen.Update 12/31/2013: op zoek naar een meer geavanceerde versie van dit project? Check out mijn nieuwe multi-kanaals s
De Raspberry Pi omzetten in een Bluetooth-apparaat dat wordt gedetecteerd door externe bluetooth-client

De Raspberry Pi omzetten in een Bluetooth-apparaat dat wordt gedetecteerd door externe bluetooth-client

IntroductieIk heb een Bluetooth Radio USB-apparaat dat was verstoffen toen ik op het struikelde. Dus ik dacht dat ik zou zet het dat te gebruiken met de Raspberry Pi. Dit instructable is over mijn reis leren voor het toevoegen van een bluetooth-inter
Prelude aan automatisering - hacken van een Remote

Prelude aan automatisering - hacken van een Remote

Een paar weken geleden, lees ik op een Arduino project een domoticasysteem te creëren. Wordt een elektronische hobbyist, wilde ik zich bewust zijn van de grenzen van mijn vaardigheden voordat u probeert een project zoals dit.Één van mijn grote pijnpu
Installeren Bluetooth USB Radio Hardware in Linux systeem

Installeren Bluetooth USB Radio Hardware in Linux systeem

IntroductieDit instructable is gebaseerd op mijn ervaring installeren Bluetooth in een notitieboekje en de Raspberry Pi.Doel lezersDit instructable zal meestal voordeel Linux gebruikers, met name Debian en de deriviatives zoals de Raspberry Pi met Ra
PiFlic - Flic draadloze smart knop & Raspberry Pi

PiFlic - Flic draadloze smart knop & Raspberry Pi

In augustus 2014 las ik over een interessant Indiegogo campagne crowdfounding genaamd "Flic de draadloze smart knop". Ik zei "Ik moet het".Na enkele maanden, gisteren, heeft Flic geleverd aan me.Wat is Flic?Het is een draadloze smart k
Bouw uw eigen Smart Hub: Próta OS voor Raspberry Pi 3

Bouw uw eigen Smart Hub: Próta OS voor Raspberry Pi 3

De nieuwe Raspberry Pi 3 beschikt over een gloednieuwe quad core 64-bits met een 1.2GHz processor, 1GB of RAM en zowel aan boord van de Wireless LAN en Bluetooth!De originele Raspberry Pi kwam live precies 4 jaar geleden en sindsdien kreeg 10 keer sn
Raspberry Pi Bluetooth LE Controller voor WS2812B (NeoPixels)

Raspberry Pi Bluetooth LE Controller voor WS2812B (NeoPixels)

Bluetooth Low Energy (aka BLE/Bluetooth 4.0/Bluetooth Smart) is de meest recente incarnatie van Bluetooth-technologie ontwikkeld door Bluetooth SIG (de organisatie die de specificatie onderhoudt). Deze communicatieprotocol is ontworpen voor toepassin
Kiel (uw zeer eigen Smart Lock)

Kiel (uw zeer eigen Smart Lock)

Hoe Cool zou het zijn om een vergrendeling die overal kan worden gecontroleerd in de wereld? Bijvoorbeeld je weg op zakenreis was en u moest laat iemand in uw huis, en nu u zal zitten kundig voor enkel dat te doen met een tik van uw telefoon ^. ^. We
Bluetooth LE bedieningsorganen van een Raspberry Pi

Bluetooth LE bedieningsorganen van een Raspberry Pi

Bluetooth Low Energy (aka BLE/Bluetooth 4.0/Bluetooth Smart) is de meest recente incarnatie van Bluetooth-technologie ontwikkeld door de Bluetooth SIG (de organisatie die de specificatie onderhoudt). Deze communicatieprotocol is ontworpen voor toepas
Maken van een domme apparaat smart met Pilight en HomeKit

Maken van een domme apparaat smart met Pilight en HomeKit

Hoi! In dit Instructable zul je leren how to turn 5 stom apparaten in de smart ones, alles voor de prijs van één enkele commerciële smart switch. Bent u klaar? We zullen beginnen binnenkort, maar eerst...Wat is dit?Dit project heeft tot doel om te he
ESP-8266 Smart vaatwasser (smart plug / aansluiting slimme)

ESP-8266 Smart vaatwasser (smart plug / aansluiting slimme)

We kopen een lokale windmolenpark elektriciteit. Natuurlijk zijn we aangesloten op het reguliere net met een constante aanvoer van elektriciteit. Maar ik wilde altijd al om te passen onze consumptie patroon volgens de beschikbare wind. Dus ik het opb
Creëren van een ReadyMedia (voorheen MiniDLNA) Media Server met een Raspberry Pi

Creëren van een ReadyMedia (voorheen MiniDLNA) Media Server met een Raspberry Pi

De Raspberry Pi is een verbazingwekkende minicomputer, geschikt voor allerlei dingen te doen en zo veel als een werkelijk aardig restaurant maaltijd kost! Ik leerde dat men zou kunnen worden gebruikt als een DLNA-mediaserver en sommige instructies el
Raspberry Pi met CODESYS programmering

Raspberry Pi met CODESYS programmering

HalloDit instructable is in wezen een tutorial om je gaat het gebruik van de CODESYS-omgeving voor het programmeren van een Raspberry Pi.Dit instructable beoogt niet zozeer voor hobbyisten, maar eerder voor ontluikende ingenieurs van de controle/auto
Controle van elke afstandsbediening van een Raspberry Pi (en Amazon Echo!)

Controle van elke afstandsbediening van een Raspberry Pi (en Amazon Echo!)

Mijn vrouw weerstation had af en toe zijn crashen, en stevenen we uit op zomervakantie snel, dus ze vroeg me naar een manier om macht-cyclus van de controller weerstation op afstand. Ik bezit reeds sommige smart switch-sockets, maar ze zijn gecontrol