Jeg har for noget tid siden bestilt en relæ hjem til en af mine raspberry's som skulle erstatte den klassiske radio signal styrring af vores "garrage port" og i sidste uge "døde" transmitteren.
Garrage port system er en ældre Bosch system der køre 26,995 MHz og en brugt erstatnings transmitter koster fra 500 kr ogomkring 700 kr for en ny Bosch kompatible transmitter enhed.
Derfor var det hver at se om jeg ikke kunne styre Porten via en Raspberry PI enhed.

Jeg var heldig at den originale bosch manual til port åbner motoren lå ude i garragen, så derfor kunne jeg nemt se hvad de "lus" på siden at port motoren kassen skulle bruges til, ellers havde jeg været i gang med at skulle dekode de elektroniske kredsløb som jeg kunne se, før jeg kunne lave en korrekt styrring af porten.

Manual for bosch port åbner

 Jeg prøvede at danne forbindelse mellem 5 og 6, som efter manualen skule være til et "pin" indtasnings system, hvorpå at porten begyndte at gå op, og et forsøg til, kørte den ned, her efter var opgaven simpel, jeg skulle benytte et relæ til at styre denne forbindelse, der forsagede et signal til porten om at køre op og ned for at åbne og lukke porten.

Det Relæ jeg havde fåret hjem ser sådan ud og købt på ebay til hele 55 kr, man kan få mange forskellige af disse relæ på ebay, men vær opmærksom på at de alle styres på forskelligt vis, nogle skal også have 5V til at drive nogle forskellige komponenter, denne kan køre direkte fra 3.3 porten på Raspberry Pi'en.

Relæ

Denne model har 4 indput ben.
VCC tilsuttes 3.3 V F.eks pin 17
IN1 tilsluttes pin 16 alias GPIO 23
IN2 tilsluttes pin 17 alias GPIO 24
GND tilsluttes pin 25

Får man VCC tilsluttet 5V fra Raspberry PI pin 2 eller 4, vil relæ'et tænde med det er ikke muligt at styre denne on/off. !

Manuelt opsætning af GPIO styrring via Shell kan gøres sådan, her for port 23.
echo "23" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio23/direction

herefter vil 1 og 0 til "value" styre Relæet.
echo "1" > /sys/class/gpio/gpio23/value
echo "0" > /sys/class/gpio/gpio23/value

man kan også gøre det lidt nemmere for sig selv og installer WiringPI og brnytte GPIO til at læse og skrive ovenstående kommandoer.

WiringPi som er et projekt der giver nogle gode værktøjer til at styre GPIO fra linux Shell, kan nu benyttes til at styre relæet.

f.eks læse alle GPIO portenes instillinger.

garage:/home/pi# gpio readall
+----------+-Rev2-+------+--------+------+-------+
| wiringPi | GPIO | Phys | Name   | Mode | Value |
+----------+------+------+--------+------+-------+
|      0   |  17  |  11  | GPIO 0 | IN   | Low   |
|      1   |  18  |  12  | GPIO 1 | IN   | Low   |
|      2   |  27  |  13  | GPIO 2 | IN   | Low   |
|      3   |  22  |  15  | GPIO 3 | IN   | Low   |
|      4   |  23  |  16  | GPIO 4 | OUT  | High  |
|      5   |  24  |  18  | GPIO 5 | OUT  | Low   |
|      6   |  25  |  22  | GPIO 6 | IN   | Low   |
|      7   |   4  |   7  | GPIO 7 | IN   | High  |
|      8   |   2  |   3  | SDA    | IN   | High  |
|      9   |   3  |   5  | SCL    | IN   | High  |
|     10   |   8  |  24  | CE0    | IN   | Low   |
|     11   |   7  |  26  | CE1    | IN   | Low   |
|     12   |  10  |  19  | MOSI   | IN   | Low   |
|     13   |   9  |  21  | MISO   | IN   | Low   |
|     14   |  11  |  23  | SCLK   | IN   | Low   |
|     15   |  14  |   8  | TxD    | ALT0 | High  |
|     16   |  15  |  10  | RxD    | ALT0 | High  |
|     17   |  28  |   3  | GPIO 8 | ALT2 | Low   |
|     18   |  29  |   4  | GPIO 9 | ALT2 | Low   |
|     19   |  30  |   5  | GPIO10 | ALT2 | Low   |
|     20   |  31  |   6  | GPIO11 | ALT2 | Low   |
+----------+------+------+--------+------+-------+

WiringPI opsætning af GPIO23 til styrring af relæ GPIO sættes til Output

garage:/home/pi# gpio -g mode 23 out

Port kørslen startes ved at sende "1" afsted, her på skal "0" sendes før en ny "1" kan sendes igen, hvergang "1" køres vil porten køre modsatte vej at tidligere.

garage:/home/pi# gpio -g write 23 1
garage:/home/pi# gpio -g write 23 0

Her under er et simplet web interface som udføre ovenstående.

Web interface til Raspberry pi samt temp i garage

-------------------------Kode start --------------------------------------------------

<?php

        $state=exec("gpio -g read 23");


        if (isset($_POST['button1']))
    {
        exec("gpio -g write 23 0");
        sleep(2);

        exec("gpio -g write 23 1");
        print("Button1");
    }

    if (isset($_POST['button2']))
    {
        exec("gpio -g write 23 1");
    }

?>

<html>
<head>

  <title> ** Garage GPIO Control ** </title>

</head>

<body bgcolor="#c0c0c0">

<H2 align=center> == Garage GPIO Control == </H2>

    <form method="post">
    <p align=center>
        Styr Garage Port => <button name="button1">Aaben </button>
        <button name="button2">Luk</button>
    </p>
    </form>

<p align=center> <a href="/./mrtg/extsens_2.html"><img style="border:0;" src="/../mrtg/extsens_2-day.png" alt="temp og fugt" ></a></p>

</body>
</html>
-------------------------Kode stop --------------------------------------------------


Php koden her lånt herfra og tilpasset til WiringPI GPIO kommando. -> http://www.diverteka.com/?p=1492

 

Et fornuftig start på at arbejde med en raspberry pi GPIO pins til at hentet data fra forskellige enheder kunne f.eks. være at hente fugtighed og temperatur fra en DHT 11 Chip enhed.

Færdige DHT 11 kredsløb købes for 10 - 15 kr. på ebay, såfremt man kan vente 3 - 5 uger på leverancen.
Disse kreds løb har 3 ben som skal forbindes til GPIO på Raspberry PI.

For at blot komme i gang, har jeg valgt at benytte nogle færdig kode på fra nettet, Adafruit_DHT binær file som tager 2 parametre

Adafruit_DHT findes her:
https://raw.github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code/master/Adafruit_DHT_Driver/Adafruit_DHT

Adafruit_DHT 11 4 som jeg køre, beskriver at det er en DHT 11 enhed der aflæses og den sidder på GPIO port 4

Nogle gang oplever man at timeningen for at henre fra DHT 11 enheden ikke er på plads, hvorefter at første læsning ikke henter data korrekt, køre man kommandoen en gang til før man en fin læsning.

Eksemple på manglende data.

sudo Adafruit_DHT 11 4
Using pin #4
Data (39): 0x56 0x0 0x32 0x0 0x44

et sekundt efter en hentning med korrekt data

sudo Adafruit_DHT 11 4
Using pin #4
Data (40): 0x2c 0x0 0x19 0x0 0x45
Temp = 25 *C, Hum = 44 %

Da jeg gerne vil have mine data ud i en graf, bliver jeg nød til at "omgås" dette ved at pakken hentningen ind i et lille script som sikre at jeg får hentet data ud, endvidere "fjerne" scriptet også unødig tekst, sådan data er lige klart til at blive leveret videre til MRTG eller RDDTool som så danner nogle fine grafer.

# Adafruit_DHT 11 4
sensor="0"
while [ $sensor -eq "0" ]; do
        Command=`Adafruit_DHT 11 4 | grep Temp`
 if [ -n "$Command" ]; then
        echo $Command  | sed -e 's/,/\n/g' | sed 's/[^0-9]*//g'
        sensor="1"
else
        sensor="0"
 fi
done

 Ovenstående kan med sikkerhed gøres bedre hurtigere og mere effitivt i både bash samt ved blot selv at kode den smule "C" der skal til, men dette var dog ikke formålet med dette lille projekt, blot at få hentet noget data og styret nogle porte.