Kategorien
Raspberry Pi

Raspberry Pi – Eigenbau Pegelwandler für serielle Kommunikation RS232 3,3Volt zu 5Volt TTL für AVR Mikrocontroller

Da mir der unter Raspberry Pi – Serielle Schnittstelle (RS232) nutzen vorgestellte Aufbau zu sperrig war, habe ich ein wenig gesucht, ob sich nicht ein Pegelwandler zusammen löten lässt, der direkt zwischen GPIO der Pi und RX / TX Pins des Mikrocontrollers hängt.

Unter http://www.elektronik-kompendium.de/sites/praxis/bausatz_pegelwandler-mit-transistoren.htm fand ich eine brauchbare Schaltung mit Transistoren und Widerständen, die ich so ähnlich in der Werkzeugkiste hatte.

Die folgenden Bilder zeigen meinen Schaltplan und den Testaufbau.

Der erste Test funktionierte einwandfrei sowohl in die Richtung Pi als auch in Richtung AVR Mikrocontroller.

Eigenbau_Pegelwandler_2Eigenbau_PegelwandlerSchaltplan_Pegelwandler_Raspberry_Pi_TTLEigenbau_Pegelwandler_3

Das dritte Bild zeigt den verwendeten Schaltplan und das vierte Bild den Aufbau auf Lochrasterplatine.

Jetzt kann ich mein Testboard und die Pi über normale Jumper Kabel verbinden, ohne diverse Zusatzplatinen herum hängen zu haben.

Kategorien
Raspberry Pi

Raspberry Pi – Serielle Schnittstelle (RS232) nutzen

Die Raspberry Pi ist mit vielen Schnittstellen ausgestattet.
Mit dem USB Port lassen sich die Möglichkeiten diesbezüglich mehr als potenzieren.
Um mit meinen AVR Mikrocontrollern zu kommunizieren ist am besten eine serielle Schnittstelle geeignet.

Natürlich hat die Raspberry Pi Eine, aber leider nur als Pins auf der GPIO Steckerleiste.
Die benötigten Pins könnten theoretisch direkt mit dem Mikrocontroller z.B. ATMega8 verbunden werden.
Das würde aber voraussetzen, dass der Mikrocontroller mit 3,3 Volt arbeitet.
Mein Pollin Evaluationsboard arbeitet aber mit 5 Volt, bringt aber eine fertige RS232 Schnittstelle zur Kommunikation mit PC’s oder sonstigen Gerätschaften mit.
Am einfachsten wäre es, die Pi hätte ebenso eine RS232 Schnittstelle.
Beim Googlen habe ich dann die Seite Serial Port Add On gefunden.
Das dort beschriebene Serial Port to TTL Digital Converter Module, habe ich mir bei Ebay gekauft.

GPIO Header Pins
RaspberryPI_GPIO_serielle_Schnittstelle
2 4 6 8 10 12 14 16 18 20 22 24 26
1 3 5 7 9 11 13 15 17 19 21 23 25
1= 3.3V, 9= GND, 8= TX, 10= RX

Die Jumper Kabel zum Anschluss an die Raspberry Pi wurden mitgeliefert.
Ich habe das Modul, wie im Bild dargestellt mit der Pi verbunden.

Um die serielle Schnittstelle ans Laufen zu bekommen müssen noch die /etc/inittab und die /boot/cmdline.txt angepasst werden.

/etc/inittab

  • Auskommentieren der Zeile ‘T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100’
#Spawn a getty on Raspberry Pi serial line
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

/boot/cmdline.txt

  • Löschen von: dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

Bilder meiner PI inklusive ‘serieller Schnittstelle’

RaspberryPI_mit_serieller_Schnittstelle_VS RaspberryPI_GPIO_serielle_Schnittstelle1_VS RaspberryPI_GPIO_serielle_Schnittstelle2_VS RaspberryPI_GPIO_serielle_Schnittstelle3_VS RaspberryPI_GPIO_serielle_Schnittstelle4_VS

Video, zur Demonstration

Das Video kommt bereits bei meinem ‘Hello World Beispiel’ im ATMega8 Bereich meiner Webseite zum Einsatz.
Ich habe dafür ein kleines Perl Script geschrieben.
Sicherlich wäre es auch mit Programmen wie minicom gegangen, aber da hätte ich mich auch erst mal wieder einarbeiten müssen.
Das Script ging schneller und ist am Ende des Tages flexibler.

Kategorien
Raspberry Pi

Raspberry Pi – via UMTS ins Netz – Konfiguration | Einstellungen

RaspberryPi_A_UMTS_D
Raspberry Pi Model A connected via UMTS!

Ich habe mir relativ günstig bei Ebay einen ‘Medionmobile’ UMTS Stick ersteigert und zusätzlich bei Aldi ein Aldi Talk Starter-Paket gekauft.

Aldi bietet einen Tarif mit 150MB UMTS und danach GPRS Geschwindigkeit, für 3,99 im Monat und monatlich kündbar.
Es wird zwar ‘nur’ das Eplus Netz genutzt, aber das ist bei mir relativ gut verfügbar.

Kurzzusammenfassung: Was war nötig online zu gehen?

  1. wvdial installieren
  2. /etc/wvdial.conf anpassen
  3. ein zweizeiliges Bash Script für das Setzen der Simkarten PIN erstellen
  4. /etc/network/interfaces anpassen
  5. Verbindungsaufbau

1. wvdial installieren

pi@raspberrypi - $ sudo apt-get install wvdial
.
.
Success!  You can run "wvdial" to connect to the internet.
  (You can also change your configuration by editing /etc/wvdial.conf)
 
pi@raspberrypi - $

2. /etc/wvdial.conf anpassen

Dazu ist ein kleines bisschen Vorarbeit nötig.
Es ist wichtig den Pfad zu kennen, über den das UMTS Device angesprochen wird.
Nach dem Einstecken des Sticks – lsusb eingeben und sehen, ob der Stick erkannt wurde.

pi@raspberrypi ~ $ lsusb
Bus 001 Device 005: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E230/E270/E870 HSDPA/HSUPA Modem
pi@raspberrypi ~ $

Achtung: Bei der Raspberry Pi Model B hat es nicht funktioniert den Stick direkt an der Pi zu betreiben, da die Stromversorgung zusammengebrochen ist. Der Betrieb über einen USB-Hub ging aber problemlos. Das Model A hält es aus, wohl weil die von Haus aus selbst weniger Strom verbraucht.

Die letzten Einträge von var/log/messages, zeigen zu welchem Pfad das UMTS Modem hinzugefügt wird. In meinem Fall /dev/ttyUSB0.

Feb 20 15:17:26 raspberrypi kernel: [   10.527167] usb 1-1.3: new high-speed USB device number 5 using dwc_otg

. . Feb 20 15:17:26 raspberrypi kernel: [ 11.313066] usbcore: registered new interface driver option Feb 20 15:17:26 raspberrypi kernel: [ 11.323480] USB Serial support registered for GSM modem (1-port) Feb 20 15:17:26 raspberrypi kernel: [ 11.334289] option 1-1.3:1.0: GSM modem (1-port) converter detected Feb 20 15:17:26 raspberrypi kernel: [ 11.345030] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB0 Feb 20 15:17:26 raspberrypi kernel: [ 11.354849] option 1-1.3:1.1: GSM modem (1-port) converter detected Feb 20 15:17:26 raspberrypi kernel: [ 11.375418] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB1

Nun habe ich die /etc/wvdial.conf für meinen Aldi – Medionmobile Zugang konfiguriert.

pi@raspberrypi /etc $ cat wvdial.conf 
[Dialer Defaults]
Phone = 
Username = 
Password = 
New PPPD = yes
 
[Dialer eplus]
Modem = /dev/ttyUSB0
Phone = *99#
Username = eplus
Password = gprs
Init3 = AT+CGDCONT=1,"IP","internet.eplus.de","0.0.0.0"
ISDN=0
Auto Reconnect=on
Stupid Mode=off
Idle Seconds=0
Auto DNS=on

3. ein zweizeiliges Bash Script für das Setzen der Simkarten PIN erstellen

Wer seine SIM Karte mit einer Pin gesichert hat, muss vor der Einwahl dafür sorgen, dass die PIN dem UMTS Modem auch bekannt ist.
Dazu dient folgendes Bash Script:

pi@raspberrypi /usr/local/bin $ sudo cat setPIN.sh
#!/bin/sh
echo "AT+CPIN=4711\n\r" > /dev/ttyUSB0

Und jetzt noch so absichern, dass nur Root rein schauen darf

pi@raspberrypi /usr/local/bin $ ls -al
insgesamt 352
-rwx--x--x  1 root staff     50 Feb 24 13:14 setPIN.sh

4. /etc/network/interfaces anpassen

Zum Schluss kommen noch 4 Zeilen in die /etc/network/interfaces

pi@raspberrypi - $ sudo cat /etc/network/interfaces ab auto ppp0
auto lo
 
iface lo inet loopback
iface eth0 inet dhcp
 
auto ppp0
iface ppp0 inet wvdial
provider eplus
pre-up /usr/local/bin/setPIN.sh
 
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

pre-up /usr/local/bin/setPIN.sh -> verweist auf das Script zur PIN Übergabe.

5. Verbindungsaufbau

Die Verbindung baut sich sofort nach dem booten automatisch auf, vorausgesetzt der Stick steckt.

Nachträglich kann die Verbindung mit folgenden Kommandos auf und abgebaut werden:

pi@raspberrypi - $ sudo ifup ppp0
pi@raspberrypi - $ sudo ifdown ppp0
Kategorien
Raspberry Pi

Raspberry Pi – Keep alive zum Webserver senden

Keep_alive
Das schöne an der Raspberry Pi im Gegensatz zu Mikrocontrollern oder auch Arduino ist, dass die Kommunikation mit dem Internet sehr einfach ist.

Von Haus aus ist eine Netzwerkschnittstelle vorhanden. Eine UMTS – Karte bekommt man sicherlich auch ans Laufen, also eignet sich die Pi sehr gut um Daten / Messwerte ins Netz zu stellen.

Und wie so vieles beginnt dieses mit einem keep alive Signal, ein kleiner Ruf in die Welt, dass die Pi arbeitet und verfügbar ist.Dann noch ein kleines Script, was die Lebenssignale ansprechend darstellt (siehe ganz unten auf der Seite) und schon macht die Sache einen sehr positiven Eindruck.
Wie in der Grafik dargestellt, bedarf es nicht sehr viel, um ein solches ‘Mini’ Projekt umzusetzen.
Ein zeitlich gesteuertes Script (cron) ruft in regelmäßigen Abständen ein Script auf einem Webserver auf, welches einen Eintrag in einer Datenbank vornimmt.
Ruft ein Besucher die Webseite in der die Daten präsentiert werden sollen auf, werden durch ein weiteres serverseitiges Script die Daten zur Verfügung gestellt und präsentiert.

In den folgenden Ausführungen stelle ich die von mir verwendeten Scripts und die Präsentation der Werte am Ende vor.

Perl Script auf der Raspberry Pi

#!/usr/bin/perl -w
# Dieses Script startet ein php script auf meiner Webseite und übergibt via 
# POST Request die aktuelle Zeit, um zu zeigen, dass die RaspberryPi am Leben ist.
# Henry Koch - 20.10.2012 
use strict;
use LWP::UserAgent;
use HTTP::Request::Common qw(POST);
my $CTIME_String = localtime(time);
 
my $browser = LWP::UserAgent->new;
my $resp = 	(POST 'www.xyz.de/dir/dir/script.php', 
			['Timestamp' => $CTIME_String);
 
my $response_to_discard = $browser->request($resp);
print $response_to_discard;

 

PHP Script zum Eintrag der Timestamps in die Web-Datenbank

<?php
//20.2.2013 Dieses Script wird von meiner Raspberry Pi aufgerufen und 
//schreibt Keep alive Timestamps in eine Datenbank Tabelle
//Die Anzahl der Tabelleneinträge ist auf 432 begrenzt 
 
//Anpassung erforderlich
$DBHost   = "HOST";
$DBName   = "DB";
$DBUser   = "ICH";
$DBPasswd = "DU";
$conn = mysql_connect($DBHost, $DBUser, $DBPasswd);
mysql_select_db($DBName);
 
//maximal 432 Datensätze in der Tabelle halten
$sql = "SELECT `lfd_Nr` FROM `keepalive_Tabelle` ORDER BY lfd_Nr 
	DESC LIMIT 430,1";
 
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
//laufende Nummer des 432-sten Datensatzes, also des ältesten Erlaubten
$nr = $row['lfd_Nr'];
mysql_free_result($result);
 
$sql = "DELETE FROM `keepalive_Tabelle` WHERE `lfd_Nr` < " . $nr . " ";
$result = mysql_query($sql);
mysql_free_result($result);
 
//Insert Timestamps (dann sind es wieder 432)
$sql = "
	INSERT INTO `keepalive_Tabelle` ( `lfd_Nr`, `ts_Garage`, 
					  `ts_Server`, `RemoteIP` )
	VALUES (
		'', '" . $_POST['Timestamp'] . "', '" . time() . "', '" . 
			 $_SERVER['REMOTE_ADDR'] . "'
	);
";
$result = mysql_query($sql);
mysql_free_result($result);
mysql_close($conn);
echo "Keepalive was run successfully";
?>

 

Parameter der verwendeten Tabelle

CREATE TABLE `keepalive_tabelle` (
  `lfd_Nr` INT(11) NOT NULL AUTO_INCREMENT,
  `ts_Garage` BIGINT(20) NOT NULL,
  `ts_Server` BIGINT(20) NOT NULL,
  `RemoteIP` VARCHAR(25) COLLATE latin1_german1_ci NOT NULL,
  PRIMARY KEY  (`lfd_Nr`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci 
  AUTO_INCREMENT=1 ;

 

PHP Script zum Aufarbeiten der Daten

<?php
//20.2.2013 Dieses Script dient zur Aufbereitung der keep alive Daten,
//die die Pi gesendet hat
//Anpassung erforderlich
$DBHost = "HOST";
$DBName = "DB";
$DBUser = "ICH";
$DBPasswd = "DU";
$conn = mysql_connect($DBHost, $DBUser, $DBPasswd);
mysql_select_db($DBName);
 
$sql = " SELECT ts_Server, lfd_Nr
FROM keepalive_tabelle
ORDER BY lfd_Nr DESC";
 
$rows = mysql_query($sql);
$first = true;
$totalCount = 0;
$tage = null;
while ($row = mysql_fetch_assoc($rows)) {
if ($first) {
$totalCount = $row['lfd_Nr'];
$first = false;
}
$timestamp = $row['ts_Server'];
if (isset($tage[date('d.n.Y', $timestamp)])) $trenner = " - ";
else $trenner = "";
$tage[date('d.n.Y', $timestamp)] .= $trenner . date('H:i', $timestamp);
}
mysql_free_result($rows);
mysql_close($conn);
echo "<h3>Die Pi hat insgesamt $totalCount Keep alive Signale gesendet</h3>";
echo "<p>Das sind die letzten 432!</p>";
 
foreach ($tage as $key => $value){
echo "<p><b>" . $key . "</b><br \>" . $value . "</p>";
}
?>

 

Präsentation der Zeitpunkte, zu denen sich die Raspberry Pi gemeldet hat.

Kategorien
Raspberry Pi

Intro – RaspberryPI

Seit November 2012 bin ich stolzer Besitzer einer Raspberry Pi. Nach Monate langer Wartezeit, war ich dann doch endlich an der Reihe :-).

Nun werde ich hier von Zeit zu Zeit berichten, was ich so mit dem Teil anstelle.
Mir schwebt vor das embedded Linux System in die Steuerung zur Erzeugung und dem Verbrauch von Sonnenenergie und Windenergie in meiner Garage mit einzubinden.

Da kommen stehen am Anfang die ersten Herausforderungen an, da das Modell B mit bis zu 5 Watt doch recht viel Strom verbraucht.
Gerade in den Wintermonaten gestaltet sich das als recht unvorteilhaft. Es gibt aber reichlich Literatur und Hinweise zum Thema im Netz und so versuche ich mal Fortschritte zu machen.
Der erste Eindruck, was es so gibt für 35 Euro: Ich bin sicher, dass die ersten Weltraumflüge wesentlich schlechter ausgerüstet waren! – Damit kann man bestimmt zum Mond fliegen!