Wie kann mit Arduino die serielle Ausgabe über TCP ausgegeben werden auf dem TP-WR703N Gerät?

Der Arduino (NANO) wird per USB an den TP-WR703N (12.09) angeschlossen. Wie kann nun von einem anderen Rechner darauf per TCP (Telnet) zugegriffen werden?

Dazu erst socat auf den WR703 installieren mit

opkg update
opkg install socat

Socate (Version 1.7.2.1) kann bidirektionale Verbindungen aufbauen. Es verbindet den USB Port mit dem TCP Port.
Dann das folgende Script erstellen start-temp.sh, und evl noch die Schnittstelle DEV und den PORT und BAUD anpassen.

#!/bin/bash

DEV=/dev/ttyUSB0
PORT=1234
BAUD=9600

while true; do
if [ -e $DEV ]
then
socat tcp-l:$PORT,reuseaddr,fork file:$DEV,nonblock,raw,echo=0,waitlock=/var/run/tty,b$BAUD
else
sleep 2
fi
done

und ausführbar machen mit

chmod +x start-temp.sh

Dann kann das Script mit ./start-temp.sh & im Hintergrund auf dem WR703N gestartet werden.

Nun kann von einem anderen Rechner mit
telnet ip-adresse 1234 die Ausgabe ausgegeben werden.

Will man das das Script autom. beim hochfahren des WR703N startet, muss es noch in der /etc.rc.local eingetragen werden (aber vor exit 0). Das geht auch über Luci:

Luci Startskripte
Luci Startskripte

Evl. muss der USB Port einmal reconnected werden.

Wie werden alle offenen Ports mit OpenWrt angezeigt?

Mit nmap können die offenen Ports wie folgt ausgegeben werden (nur gegen localhost ausführen):

[root@OpenWrt ~]# nmap localhost

Ausgabe dann z.B.

Starting Nmap 6.01 ( http://nmap.org ) at 2013-08-22 08:20 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00030s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
22/tcp open ssh
53/tcp open domain
80/tcp open http

Der Port 53 ist für den DNS Server. Details können auch mit
Netstat ausgegeben werden z.B.:

[root@OpenWrt ~]# netstat -plnt

Ausgabe:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1789/uhttpd
tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 1820/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1771/dropbear

Wie kann in Luci von OpenWrt die Sprache geändert werden?

Die Gui von Luci kann auch in einer anderen Sprache eingestellt werden.
Dazu kann mit folgendem Befehl auf der Konsole die Liste der verfügbaren Sprachen ausgegeben werden.

[root@OpenWrt ~]# opkg list | grep luci-i18n-

Bis jetzt wurden folgende Sprachen übersetzt:

luci-i18n-catalan - 0.11.1-1 - Catalan (by Eduard Duran)
luci-i18n-chinese - 0.11.1-1 - Chinese (by Chinese Translators)
luci-i18n-english - 0.11.1-1 - English
luci-i18n-french - 0.11.1-1 - French (by Florian Fainelli)
luci-i18n-german - 0.11.1-1 - German
luci-i18n-greek - 0.11.1-1 - Greek (by Vasilis Tsiligiannis)
luci-i18n-hebrew - 0.11.1-1 - Hebrew
luci-i18n-hungarian - 0.11.1-1 - Hungarian
luci-i18n-italian - 0.11.1-1 - Italian (by Matteo Croce)
luci-i18n-japanese - 0.11.1-1 - Japanese (by Tsukasa Hamano)
luci-i18n-malay - 0.11.1-1 - Malay (by Teow Wai Chet)
luci-i18n-norwegian - 0.11.1-1 - Norwegian (by Lars Hardy)
luci-i18n-polish - 0.11.1-1 - Polish
luci-i18n-portuguese - 0.11.1-1 - Portuguese (by Jose Monteiro)
luci-i18n-portuguese-brazilian - 0.11.1-1 - Portuguese (Brazilian) (by Carlos Cesario)
luci-i18n-romanian - 0.11.1-1 - Romanian
luci-i18n-russian - 0.11.1-1 - Russian (by Skryabin Dmitry)
luci-i18n-spanish - 0.11.1-1 - Spanish (by Guillermo Javier Nardoni)
luci-i18n-ukrainian - 0.11.1-1 - Ukrainian
luci-i18n-vietnamese - 0.11.1-1 - Vietnamese (by Hong Phuc Dang)

Mit dem folgenden Zweizeiler wird Deutsch eingestellt.

opkg update
opkg install luci-i18n-german

Dann in der Luci-Web-Gui unter der Seite System/System -> Language and Style auf Deutsch schalten. In der Regel steht Sprache dort schon auf automatisch, dann wird Deutsch automatisch gewählt.

Luci Gui in Deutsch
Luci Gui in Deutsch

Für andere Sprachen analog vorgehen.

Die Einstellungen für Luci die automatisch eingestellt werden, sehen dann so aus:

[root@OpenWrt ~]# cat /etc/config/luci

config core 'main'
option lang 'auto'
option resourcebase '/luci-static/resources'
option mediaurlbase '/luci-static/bootstrap'

config extern 'flash_keep'
option uci '/etc/config/'
option dropbear '/etc/dropbear/'
option openvpn '/etc/openvpn/'
option passwd '/etc/passwd'
option opkg '/etc/opkg.conf'
option firewall '/etc/firewall.user'
option uploads '/lib/uci/upload/'

config internal 'languages'
option en 'English'
option de 'Deutsch'

config internal 'sauth'
option sessionpath '/tmp/luci-sessions'
option sessiontime '3600'

config internal 'ccache'
option enable '1'

config internal 'themes'
option OpenWrt '/luci-static/openwrt.org'
option Bootstrap '/luci-static/bootstrap'

Wie installiere ich MiniPwner auf OpenWrt 12.09 das auf einem TP-Link TL-WR703N Router läuft?

MiniPwner bietet…

Nmap – Netzwerk Scanner
Tcpdump – Sniffer
Netcat – Daten kopieren über Netzwerk
aircrack Wireless – Netzwerk Analyse
kismet – WiFi Analyse
perl – Programmier Sprache Perl
openvpn – VPN Client und Server
dsniff – Sniffing und spoofing Tools, mit arpspoof
nbtscan – NetBIOS Netzwerk Scanner
snort – Sniffer, Packet Logger, Intrusion Detection System
samba2 client – Windows File Sharing Client
elinks – Text Based Web Browser
yafc – FTP Client
openssh-sftp-client – Secure File Transfer Client
mc – Dateimanager für Kommandozeilen und Mausunterstüzung
luci-theme-bootstrap – Sprachunterstüzung und Thema für Luci
htop – Prozessmanger zum anzeigen und kill von Prozessen und Resouren
iftop – Netzwerk Interface Anzeige
ettercap – Netzwerk Penetrations Tool
mdk3 – Netzwerk Penetrations Tool
aircrack-ptw – Netzwerk Penetrations Tool

Voraussetzung:
1. Ein formartierter USB-Stick mit drei Partitionen. Ich habe einen 8 GB Stick so formatiert:

sda1 - sys (80 MB oder mehr) ext2 primary
sda2 - swap (64 MB oder mehr) linux-swap primary
sda3 - data (der Rest des Speichers) ext2 primary

2. OpenWrt Version 12.09 (kein trunk) auf OpenWrt geflasht
downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/

Installation
1. Passwort setzen

2. Über WEB-Frontend Luci zu Network->WiFi gehen und das Netzwerk scannen. Auswählen des erkannten Homenetzwerk. Eingabe des Passwort und als Firewall-Zone WAN auswählen. Speichern.
Unter den erweiterten Einstellungen den Country Code auf DE und HT Mode setzen, wenn er nicht schon da ist.
Speichern.

3. Reboot

4. USB-Stick anschließen

5. Einloggen per SSL folgende updates ausführen:

opkg update
opkg install kmod-usb-storage
opkg install kmod-fs-ext4
opkg install block-mount

Kontrolle mit

dmesg

es muss in einen der letzten Zeilen die Partitionen sda, sda1, sda2, sda3 angezeigt werden.

6. Die Datei /etc/config/fstab wie folgt bearbeiten damit der USB-Stick eingebunden wird.

config global automount
option from_fstab 1
option anon_mount 1

config global autoswap
option from_fstab 1
option anon_swap 1

config mount
option target /overlay
option device /dev/sda1
option fstype ext2
option options rw,sync
option enabled 1
option enabled_fsck 0

config mount
option target /home
option device /dev/sda3
option fstype ext2
option options rw,sync
option enabled 1
option enabled_fsck 0

config swap
option device /dev/sda2
option enabled 1

Nach dem mounten ist /overlay die SYS Partition.
Das /home Verzeichnis ist die Daten-Partition die für alles was benötigt wird verwand werden kann.

7. Mounten des USB-Sticks und kopieren der SYS Partition auf den Stick:

mkdir /mnt/sda1 /home
mount /dev/sda1 /mnt/sda1
tar -C /overlay -cvf - . | tar -C /mnt/sda1 -xf -

8. Reboot

9. Per SSL verbinden und Testen ob der Stick eingebunden wurde mit

df

Testen ob der Swap funktioniert mit

swapon /dev/sda2

Wenn „swapon: /dev/sda2: swapon failed: Device or resource busy“ kommt, ist alles ok.

10. Instalation von dsniffer vom derbycon Repo und anderer Tools mit:

opkg update
opkg install http://minipwner.com/20120514/downloads.openwrt.org/snapshots/trunk/ar71xx/packages/dsniff_2.4b1-2_ar71xx.ipk

opkg install luci-theme-bootstrap mc htop iftop ettercap tar openssh-sftp-client mdk3 nmap tcpdump aircrack-ng aircrack-ptw kismet-client kismet-server perl openvpn nbtscan snort karma samba36-client elinks yafc

Fertig.

Alles was fehlt, kann über opkg noch installiert werden.

Diese Anleitung ist der Anleitung von megal0maniac (engl.) gefolgt.

Arduino Mega Projekt: Ansteuerung der besuchten Urlaubsorte auf einer Weltkarte mit Arduino Mega mit LEDs

Wollte lange schon mal, zur Erinnerung an schöne Urlaube eine Markierung auf der Weltkarte anbringen wo wir waren. Als IT-Berater muss es dann aber schon eine Micro-Computer gesteuerte Version sein. Ein roter Punkt reicht da nicht.

Also hier das Ergebnis als Video, und weiter unten dann die Details:

Also so sieht die Weltkarte von vorne aus:

Die Weltkarte in einem Bilderrahmen
Die Weltkarte in einem Bilderrahmen

Hier die Rückseite. Ein Arduino Mega wurde verwendet, weil der bis zu 60 Ausgänge hat, die einzeln angesteuert werden können.

Die ganze Rückseite, es fehlen noch die analogen Eingänge die als digitale Ausgänge geschaltet werden
Die ganze Rückseite, es fehlen noch die analogen Eingänge die als digitale Ausgänge geschaltet werden

An jedem besuchten Urlaubsort wurde ein 3 mm Loch gebohrt und eine LED reingesteckt. An einen Pin der LED wurde jeweils noch ein 220 Ohm Widerstand angelötet. Ja, es sieht etwas wild aus:

An jede LED kommt noch ein Widerstand
An jede LED kommt noch ein Widerstand

Eine Nahaufnahme des Arduino Mega.

Weltkarte5

Ein Reed-Kontakt habe ich noch an einem Interrupt-Eingang des Arduino geschaltet, so kann man von vorne mit einem Magnet über den Null-Meridian fahren, und schon leuchten unsere TOP 3 Urlaubsorte (Hawaii, Tokio, Seychellen) permanent.

Reed-Kontakt für die TOP 3 Urlaubsorte
Reed-Kontakt für die TOP 3 Urlaubsorte

Hier das C-Programm, welches in den Arduino geflasht wird und die Ansteuerung durchführt.

Das ist die 1. Version, da werde ich noch einiges ergänzen.
„Arduino Mega Projekt: Ansteuerung der besuchten Urlaubsorte auf einer Weltkarte mit Arduino Mega mit LEDs“ weiterlesen

Installieren der Bourne-again shell (bash) auf WR-TR703N anstatt der Almquist-Shell (ash)

Nach dem Installieren von OpenWrt ist die Almquist-Shell (ash) installiert. Da die ash im Vergleich zu anderen modernen Shells sehr geringe Ansprüche an Speichergröße und Rechnergeschwindigkeit stellt, wird sie in OpenWrt und anderen Embedded-Linux-Systemen verwendet.

Welche Shell aktiv ist kann mit

echo $SHELL

auf der Konsole angezeigt werden. Obwohl der Befehl ja nur den Inhalt der Variable SHELL ausgibt, und die muss ja nicht immer richtig gesetzt sein.
Es reicht auch ein
echo $0

welches dann
-bash
oder je nach Shell einen Wert ausgibt.

So nun wollen wir die bash installieren weil sie komfortabler und gebräuchlicher ist.
opkg update
opkg install bash

in /etc/passwd
in der ersten Zeile, der root Zeile die bash eintragen:
root:x:0:0:root:/root:/bin/bash

dann eine Datei .bash_profile anlegen mit folgenden Inhalt:

echo ". $HOME/.bashrc" > /root/.bash_profile

dann eine eigene .bashrc Datei mit den User-Einstellungen anlegen, oder diese verwenden:

wget -P /root/ http://wenzlaff.de/download/linux/.bashrc

Nach dem ausloggen und einloggen steht die bash zur Verfügung, was leicht mit

$ echo $SHELL
getestet werden kann, es wird dann ausgegeben:
/bin/bash

Wie kopiere ich nun vom Mac OS X Dateien auf den WR703N?

Das geht mit scp – Secure copy to copy files to/from a remote computer.

Zum Beispiel wenn im aktuellen Verzeichnis die Datei TWSerial.jar lieg und die in das Root Verzeichnis des WR703N kopiert werden soll.
Wobei der User: root und die IP des WR703: 192.168.2.122 ist (evl. noch anpassen):

scp TWSerial.jar root@192.168.2.122:/root

Das Ergebnis:
TWSerial.jar 100% 170KB 169.8KB/s 00:00

Weiter Infos zu scp:

usage: scp [-12346BCEpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
[-l limit] [-o ssh_option] [-P port] [-S program]
[[user@]host1:]file1 ... [[user@]host2:]file2

Oder auf dem Mac Dateien vom WR703N kopieren, z.B. alle my*.gplot Dateien im lokalen Verzeichnis sichern:

scp root@192.168.2.122:/usr/src/fhem/www/gplot/my*.gplot .

Wie kann eine Java VM auf TP WR 703N installiert werden?

Über den Paketmanager jamvm installieren (jamvm_1.6.0-git-2_ar71xx.ipk).
Dazu ja* eingeben und suchen klicken. Anschließend das Paket installieren:

Gui von OpenWrt - Luci - Paketverwaltung
Gui von OpenWrt – Luci – Paketverwaltung

Anschließend testen ob die Version richtig installiert ist mit:
jamvm -version
es wird dann folgendes ausgebeben:

JamVM - Java VM - Ausgabe der Version mit: jamvm -version
JamVM – Java VM – Ausgabe der Version mit: jamvm -version

Wie kann die Java VM verwendet werden:
jamvm
ergibt folgendes:

Verwendung von jamvm - Java VM
Verwendung von jamvm – Java VM

Weiter tests folgen …

Startpunkt zu embeddet Java.

Quicktest des Withings Track Gadget für Activity, Schlaf, Food und Puls

Fünf Tage Quicktest mit dem Gadget von Withings in der Tasche. Es wiegt nur ein paar Gramm und hat sogar einen Touch-Screen. So kann es bedient werden:

Bisher läuft der Datenaustausch mit dem iPhone gut. Die App ist auch gut.
Der Accu hielt aber nicht wie angegeben 2 Wochen. Evl. war er auch nicht ganz aufgeladen.
Es gab in den Tagen auch einen neue Firmware, die ohne Probleme installiert werden konnte.

Folgende wichtige Features fehlen meiner Meinung nach noch in der App. (Version 1.17, Firmware Pulse: 731) und in der Browser-Version und kommen hoffentlich in zukünftigen Versionen.

Reihenfolge der Wichtigkeit nach sortiert:

1. Warnung bzw. Hinweis wenn der Accu geladen werden muss. So kann es passieren, das der Puls einfach aus geht, und keine Daten erfasst, ohne das man es mit bekommt. Nachträglich können bisher ja auch die Werte nicht manuell nachgetragen werden.

2. CSV Export der Daten für Aktivität, Puls, Strecke und Schlaf. Das ist für externe bzw. eigene Auswertungen unbedingt nötig.

3. Manuelles löschen für gemessene Pulswerte. Dann können auch fremde Personen mal eine Messung durchführen, ohne das die eigenen Daten verfälscht werden. Schnelle Antwort vom Support. Das ist doch schon integriert. Nur nicht so leicht zu finden. In der App. Herzfrequenz auswählen, dann auf den Wert klicken und über den Papierkorb oben rechts den Wert löschen.

4. Manuelles erfassen von Schlaf, Aktivität, Puls und Strecke.

Der Support von Withings habe ich schon mal informiert. Der meldet sich sehr schnell. Super.

Der Test läuft …

Wie setzte ich bei einem Mac mit OS X die drahtlose (Alu) Bluetooth Tastatur zurück (RESET)?

Das ist mir schon das 5. Mal passiert, das die drahtlose Mac Tastatur sich nicht mehr per Bluetooth verbinden ließ.
Das Bluetooth paaring klappte mit keinem Gerät, auch Ein/Aus-Schalten und neue Batterien haben nicht geholfen.

Dann bin ich nach dieser Anleitung vorgegangen, und die Tastatur wurde „wiederbelebt“.

Der „Trick“ ist also nach dem Ausschalten der Tastatur und „Bluethooth Geräte Konfigurieren“ muss der Ein/Aus-Schalter an der Tastatur solange gedrückt gehalten werden,
bis der Name der Tastatur angezeigt und dann auf „Weiter“ geklickt wird und dann erscheint einen neue Paaring-Nummer. Erst wenn die Nummer erscheint, kann die Taste losgelassen werden, und die Nummer über die Tastatur eingegeben werden.

Arduino MEGA 2560 Board R3 16U2 – Quicktest am USB Hub unter Mac OS X

Hochladen eines Testprogramms über einen „alten“ USB-Hub. Als Board muss in der IDE „Arduino Mega 2560 …“ ausgewählt werden und die Serielle-Schnittstelle muss ausgewählt werden. Die werden am Mac OS X nur angezeigt wenn das Gerät angeschlossen ist. Es ist auch eine andere wenn der USB-Hub angeschlossen ist, bei mir z.B. dev/cu.usbmodemfd1421, der ist aber auf jedem System anders.

Der Arduino Mega 2560
Der Arduino Mega 2560

Der ATMega2560 R3 ist ein Microcontroller auf Basis des ATmega2560 mit diesen technischen Daten:
Microcontroller ATmega2560
Operating Voltage 5V
Input Voltage (recommended) 7-12V
Input Voltage (limits) 6-20V
Digital I/O Pins 54 (of which 14 provide PWM output)
Analog Input Pins 16
DC Current per I/O Pin 40 mA
DC Current for 3.3V Pin 50 mA
Flash Memory 256 KB of which 8 KB used by bootloader
SRAM 8 KB
EEPROM 4 KB
Clock Speed 16 MHz

Der Arduino Mega am USB-Hub
Der Arduino Mega am USB-Hub

Wir zersägen ein Netzteil von TP-Link WR703N!

Achtung! Nicht nachmachen! Lebensgefahr!
Wollte mal sehen wie das Netzteil (Eingang: 110-230 Volt, Ausgang: 5V, 1A an USB) so von innen aussieht. Das Gehäuse ist leider verschweißt, und musste mühsam mit der PUK-Säge geöffnet werden. Zuerst das Netzteil aus der Steckdose ziehen, also Spannungslos machen.Hier das Ergebnisse:

20130722-205156.jpg

Auf beiden längst Seiten vorsichtig langgesägt:
20130722-205216.jpg

Die Platine von oben:
20130722-205232.jpg

Die Platine von unten:
20130722-205241.jpg

Querschnitt, von der Seite. Links kann man gut den USB Ausgang erkennen:
20130722-205305.jpg

Was kann die Ursache sein, das von OpenWrt kein Internet Zugriff möglich ist?

Was kann die Ursache sein, das von OpenWrt kein Zugriff auf das Internet möglich ist?
Checken ob: ping wenzlaff.de geht, wenn nicht,
dann in der /etc/confi/network Datei überprüfen,
ob der folgende Eintrag mit dem DNS und Gateway vorhanden ist:

config interface ‚lan‘
option ifname ‚eth0‘
option type ‚bridge‘
option proto ’static‘
option ipaddr ‚192.168.2.122‘
option netmask ‚255.255.255.0‘
option ip6assign ’60‘
option dns ‚xxx.xxx.xxx.xxx‘ # IP-Adresse aus Router eintragen
option gateway ‚192.168.2.1‘

Das Netzwerkkabel muss am Router angeschlossen werden und nicht an der Netzwerkkarte des Rechners.

Wie kann auf den TL-WR703N Fhem installiert werden?

Dazu muss erst einmal mehr Speicher per USB-Stick bereitgestellt werden.

Dann gem. dieser Anleitung vorgehen.

Also kurz:
1. OpenWrt installieren
2. USB-Stick vorbereiten und an WR703N anschließen
3. Perl installieren
4. Fhem aus Subversion ausschecken
5. mit make install Fhem erstellen
6. nun kann Fhem gestartet werden in /usr/src/fhem mit: perl /opt/fhem/fhem.pl /opt/fhem/fhem.cfg
7. im Browser http://192.168.2.122:8083/fhem (ip anpassen) aufrufen, es kommt:

Fhem Startbildschirm auf WR-703N mit OpenWrt
Fhem Startbildschirm auf WR-703N mit OpenWrt

8. Autostart für Fhem einrichten. Datei /etc/init.d/fhem anlegen mit folgenden Inhalt:

#!/bin/sh /etc/rc.common
# FHEM Init Script
START=11
STOP=15
start() {
# cd /usr/src/fhem/
# perl /opt/fhem/fhem.pl /opt/fhem/fhem.cfg
# auf neue Verz. angepasst:
cd /etc/src/fhem/
perl /etc/src/fhem/fhem.pl /etc/src/fhem/fhem.cfg
}
stop(){
echo "shutdown" | nc localhost 7072
}

Dann noch die /etc/init.d/fhem Datei ausführbar machen und aktivieren.
chmod +x /etc/init.d/fhem
/etc/init.d/fhem enable
/etc/init.d/fhem start

Nach reboot startet nun Fhem automatisch.

9. Fhem weiter konfigurieren

10. z.B. den ersten Plot anzeigen. Dazu z.B in das Verzeichnis /fhem/www/log die eine Test-Datei temp.log mit Messwerten kopieren. In der /etc/src/fhem.cfg
diese Anpassungen machen:

define Test dummy
define FileLog_Test FileLog /usr/src/fhem/log/temp.log Test
attr FileLog_Test logtype temp4:Plot,text
attr FileLog_Test room Test
define wlTest weblink fileplot FileLog_Test:temp4:CURRENT
attr wlTest room Test

Und schon wird dieses schöne Diagramm angezeigt. Es ist noch nicht viel, da die Testdaten nur ein paar Zeilen sind:

1. Test Plot
1. Test Plot

Wie kann für den TL WR703N ein externer USB-Stick als Speicher verwendet werden?

Wenn der TL WR703N mit OpenWRT 12.09 Attitude Adjustement und Luci 0.11.1 geflasht wurde, bleibt nur noch ca. 870 KB an Speicher frei.

Wie kann nun ein externer USB Stick an den WR703 angeschlossen werden?

1. USB-Stick vorbereiten

Der USB Stick muss vorher, mit ext4 an einen anderen Rechner formatiert werden, da der Speicher dafür nicht ausreicht.
Ich habe einen 8 GB Stick mit einer Partitionen wie folgt erstellt:

8 GB Stick, ext4, primäre Partition, aktive – /dev/sda1

unter Windows erstellt und formatiert mit dem Partition Wizard Home Edition wie in beschrieben.

2. Firmware flashen

Neue Firmware über Luci GUI geflasht, auf 12.09 r36088, da die „alte“ Probleme machte.

3. USB-Stick einbinden

Wie in beschrieben vorgegangen.

Dann gem. der Anleitung:

ls /dev/sd*
opkg update

opkg install kmod-usb-storage
opkg install kmod-fs-ext4 block-mount

# ab jetzt ist auch in Luci der Tab vorhanden und zwar unter System – Mount Points

mkdir -p /mnt/sda1
mount /dev/sda1 /mnt/sda1

mkdir -p /tmp/cproot
mount – -bind / /tmp/cproot
tar -C /tmp/cproot -cvf – . | tar -C /mnt/sda1 -xf –

umount /tmp/cproot
umount /mnt/sda1

vi /etc/config/fstab
# in der config mount Sektion
option target /
option enabled 1

reboot
df # zeigt den Speicher an
Bildschirmfoto 2014-07-05 um 10.12.38

Speicher ist nun genug vorhanden. Das kann auch unter Luci angezeigt werden:
Bildschirmfoto 2014-07-05 um 10.14.03
Und die gemachten Änderungen aus der /etc/config/fstab werden so angezeigt:
Bildschirmfoto 2014-07-05 um 10.14.20

Flashen des TP-Link TL-WR703N mit OpenWrt über den seriellen Port und einrichten der Luci Gui

Durch das flashen des TP-Link TL-WR703N mit einem Image unbekannter Herkunft,
hatte das schöne Teil leider seinen Geist aufgegeben.

Es kann aber wiederbelebt werden, aber nur über die Serielle-Schnittstelle die nicht nach draußen geführt ist.
Also musste ich doch die drei Kontakte nach draußen führen. Nach dem öffnen des Geräts, und freilegen der Platine,
sind die drei Kontakte (TX, RX, Masse) schnell lokalisiert, dank der guten Fotos auf http://forums.openpilot.org/blog/52/entry-92-unbrick-wr703n-wifi-router/

Eine gute Anleitung ist hier zu finden

http://wiki.villagetelco.org/index.php?title=Building_a_Serial_Port_for_TL-WR703N
und auch
http://www.bitzof.me/doku.php?id=electronics:wr703n:unbricking

Das größte Problem dabei ist an die kleinen Kontakte, passende Drähte anzulöten. Die Kontakte sind wirklich nur ca. 0,4 mm klein. Gefühlt 0,0000001 mm.
Ein Kollege hatte noch den passenden Draht, der wirklich dünner als ein Haar ist und konnte mir einen Meter überlassen.

Also die Brille gesucht und es hat beim ersten Versuch geklappt.

Das war der komplizierteste Teil.

Um den Mac zu schonen, habe ich das flashen der neuen Firmware auf einen alten Windows-Rechner gemacht.

Was war nötig alles nötig?

1. Den seriellen to USB Adapter cf20… an den WR-703N anschließen:

PIN 4 TX an WR TX
PIN 5 RX an WR RX
PIN 6 GND an WR GND

Achtung! Nicht RX an TX und TX an RX .so wie sonst, dann klappt es nicht und das Terminal Fenster bleib schwarz.

2. Treiber für den cf20 von geladen.
Der Treiber richtet einen virtuell COM Port ein. Port in den Systemeinstellungen auf 115200/8/N/1/XON-XOFF stellen.

3. Putty laden und seriell Einstellungen auf: 115200/8/N/1/XON-XOFF

4. TFtp Server von laden und neue OpenWrt Firmware (openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin) in das Verzeichnis kopieren.
Habe den langen Namen noch gekürzt, in firm.bin.

Install Verzeichnis des TFTP32 Server
Install Verzeichnis des TFTP32 Server

Einstellungen des TFTP Servers
Einstellungen des TFTP Servers

5. Rechner IP Adresse setzten 192.168.1.100. Unter Netzwerkverbindungen-Lan-Verbindung-Allgemein-Eigenschaften-Internetprotokoll-Eigenschaften-Folgende-IP-Adresse verwedne-IP-Adresse.
Wichtig: Verbindung vom Rechner zum WR703N per Ethernet nicht vergessen!

6. Nach verbinden des WR-703N hat man max. 1 Sekunde zeit, im Terminal „tpl“ und Enter einzugeben um auf dem Prompt zu kommen.
Beim dritten Versuch hat es bei mir geklappt. Wenn hornet> angezeigt wird, hat man gewonnen.

7. Dann folgende Befehle eingeben:

hornet> tftpboot 0x81000000 openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin
hornet> erase 0x9f020000 +0x3c0000
hornet> cp.b 0x81000000 0x9f020000 0x3c0000
hornet> bootm 9f020000

flash

Lösch Befehl
Lösch Befehl

und warten bis alles abgeschlossen ist. Dann Enter drücken und der OpenWrt-Prompt mit OpenWrt-Logo erscheint.

8. Ethernet verbinden. Mit Telnet 192.168.1.1 verbinden und wenn der OpenWrt Prompt kommt,
das Passwort setzen mit passwd. Ab dann ist kein Telnet mehr möglich. Neu verbinden mit SSH.

9. Eine andere statische IP vergeben, die im Namensraum vom DNS Server des Internet Routers liegt vergeben.

10. Per SSH anmelden und das Netzwerk einstellen: /etc/config/network

config interface 'lan'
option ifname 'eth0'
option type 'bridge'
option proto 'static'
option ipaddr '192.168.2.123' # feste statische Adresse des Routers
option netmask '255.255.255.0'
option ip6assign '60'
option dns '8.8.8.8' # Adresse des Google dns, oder anderen
option gateway '192.168.2.1' # Adresse des gateway

reboot
Ethernet Kabel an Router anschließen.
ping wenzlaff.de
muss erfolgreich laufen

11. Dann die Web-Gui luci installieren
opkg update
opkg install luci luci-i18n-german luci-theme-bootstrap

12. Web Server starten
/etc/init.d/uhttpd start
und damit es beim nächsten start automatisch läuft:
/etc/init.d/uhttpd enable

13. Im Browser die feste statische Adresse aufrufen und anmelden mit User: root und den vergebenen SSH Passwort anmelden.

Bildschirmfoto 2013-07-11 um 21.53.08

Bildschirmfoto 2013-07-11 um 21.53.45

5 V 4-Phase Stepper Motor und Driver Board ULN2003 für Arduino

So, der 4-Phasen-Stepp_Motor ist schon mal gekommen für das nächste Projekt.
Diese techn. Daten soll er haben:

  • Spannung: DC5V
  • 4-Phase
  • Reduction Ratio: 1/64
  • Step Torque Angle: 5.625°/64
  • DC Resistance: 200Ω ± 7% (25℃)
  • Insulation Resistance: >10 MΩ (500 V)
  • Dielectric Strength: 600V AC / 1mA / 1 s
  • No-load Pull in Frequency: >600 Hz
  • No-load Pull out Frequency: >1000 Hz
  • Pull in Torque: >34.3 mN.m (120 Hz)
  • Detent Torque: >34.3 mN.m
  • Temperature Rise: < 40 K (120 Hz)
  • Geräusch: < 40dB (120 Hz, No load, 10 cm)
  • Größe der Platine: ca. 29 ×21 mm

20130709-205443.jpg

Wie schreibe ich die Daten mit minicom aus der der seriellen USB-Schnittstelle in eine Datei unter Mac OS X?

Das Terminal-Programm minicom muss erste installiert werden.
Dann muss minicom auf den USB Port eingestellt werden.
Aufruf:
sudo minicom -s

Dann unter Konfiguration – Einstellungen zum seriellen Anschluss den USB Port angeben z.B. bei mir:
/dev/tty.usbserial-A501U7KD
Geschwindigkeit auf: 9600

Bildschirmfoto-Minicom-Menue

Bildschirmfoto-Minicom-Einstellungen
Unter Konfiguration – Dateinamen und Pfade die Verzeichnisse für Download und Upload setzen.

Und alles speichern mit Konfiguration – Speichern als „dfl“
Minicom beenden.

Als User starten mit:
minicom -C logdateiname.txt

Ab sofort wird die ganze Ausgabe in die logdateiname.txt geschrieben.

Beenden kann man die Ausgabe mit:
Ctrl+A und dann Q

Hier ein Beispiel mit den gelesenen Luftdruck und Temperatur Parametern über den USB Port:

Minicom Terminal
Minicom Terminal

Arduino Nano Relais Ansteuerung (Relay test)

Mit dem Arduino kann leicht auch 230 Volt geschaltet werden. Dazu kann ein Relais an den digitalen Pin 7 und + VCC und – Masse verbunden werden.

In diesem Video kann man hören und sehen, wie das Relais alle 5 Sekunden an und wieder aus geschaltet wird.

Folgendes Sketch ist in den Arduino Nano hochzuladen.
/*
TWRelais

Dieses Programm schaltet das Relais alle 5 Sekunden an und aus.

Thomas Wenzlaff 02.07.2013

Das Relais wir an den digitalen Pin 7 angeschlossen und VCC 5 V und Masse verbunden

Größe des compilierten Programm: 1108 Byte
*/

// An Pin 7 ist eine Relais angeschlossen,
const int RELAIS = 7;

// Die setup Methode wird nur einmal ausgeführt und bei reset
void setup() {
// Digitaler PIN 7 mit der RELAIS ist ein Ausgang
pinMode(RELAIS, OUTPUT);
}

// Die Endlosschleife
void loop() {
digitalWrite(RELAIS, HIGH); // RELAIS anschalten
delay(5000); // 5s warten
digitalWrite(RELAIS, LOW); // RELAIS ausschalten
delay(5000); // 5 Sekunden warten
}

Luftdrucksensor BMP085 von Bosch inkl. Temperatursenor für den Arduino

Der BMP085 ist ein Drucksensor mit hoher Präzision und ultra-niedrigem Stromverbrauch für den I2C-Bus.

Technische Daten:

  • Druckbereich: 300 – 1100 hPa (9000 Meter über dem Meeresspiegel bis -500 m)
  • Versorgungsspannung: 1.8V – 3.6 V (VDDA). 1.62V – 3.6 V (VDDD)
  • LCC8 Paket: bleifreie keramische Carrier Package (LCC)
  • Geringe Leistungsaufnahme: 5 μA im Standard-Modus
  • Hohe Präzision: Low-Power-Modus, die Auflösung von 0.06 hPa (0,5 m)
  • Hohe linearen Modus mit einer Auflösung von 0.03 hPa (0,25 m)
  • Mit Temperatur-Ausgang
  • I2C-Schnittstelle
  • Temperaturkompensation
  • Reaktionszeit: 7,5 ms
  • Standby-Strom: 0.1 μA
  • Beseitigt die Notwendigkeit für einen externen Taktgeber
  • Größe: 21 x 15 x 10 mm

Die Platine mit dem BMP085 (auf GY-65) ist nur 1,5 cm x 2 cm klein.
Von oben:

Luftdrucksensor von vorne
Luftdrucksensor von vorne

Von unten:

Luftdrucksensor für Arduino
Luftdrucksensor für Arduino

Anschlussbelegung:

BMP085 Luftdrucksensor
BMP085 Luftdrucksensor

Software:
Folgende beiden Libs von Adafruit downloaden und in das Lib Verheichnis kopieren. Evl. noch die Verzeichnisnamen umbenennen, da keine Sonderzeichen vorhanden sein dürfen.

1. Adafruit Unified Basis Sensor Driver

2. Adafruit Unified Drucksensor BMP085 Driver

Diesen Sketch TWDruck hochladen:


#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP085.h>

/* 
TWDruck Version 1.0 vom 06.07.2013

Thomas Wenzlaff http://www.wenzlaff.de

Programm Größe: 12296 Bytes

Dies Programm liest den Luftdrucksensor und den Temperatursensor endlos aus,
und gibt die Werte über die Serielle-Schnittstelle mit Leerzeichen getrennt aus.
Kommentare beginnen mit #.

z.B.
# Luftdruck und Temperatur Messprogramm
# TWDruck 1.0 vom 06.07.2013
# http://www.wenzlaff.de
# Sensor: BMP085
# Treiber Version: 1
# Unique ID: 10085

# [Luftdruck in hPa] [Temperatur in Grad Celsius] [Höhe in Meter] 

1022.59 26.84 -80.49
1022.73 26.84 -81.69
1022.63 26.85 -80.83
1022.51 26.85 -79.80
...

Anschluss an den Nanu Arduino:

Das BMP085 an:
    SCL   an A5
    SDA   an A4
    VDD   Plus 3.3V DC
    Masse Minus
    
*/
const long MESSINTERVAL = 5000; // Messintervall in milli Sekunden
const long SENSOR_ID = 10085; // eindeutige Sensor ID
String KOMMENTAR = "# "; // Kommentar präfix
String TRENNER = " "; // Trennzeichen der Werte

Adafruit_BMP085 bmp = Adafruit_BMP085(SENSOR_ID);

void anzeigeDetails(void)
{
  sensor_t sensor;
  bmp.getSensor(&sensor);
   
  Serial.println(KOMMENTAR +"Luftdruck und Temperatur Messprogramm");
  Serial.println(KOMMENTAR +"TWDruck 1.0 vom 06.07.2013");
  Serial.println(KOMMENTAR +"http://www.wenzlaff.de");
  Serial.print (KOMMENTAR + "Sensor: "); Serial.println(sensor.name);
  Serial.print (KOMMENTAR + "Treiber Version: "); Serial.println(sensor.version);
  Serial.print (KOMMENTAR + "Unique ID: "); Serial.println(sensor.sensor_id);
  delay(500);
}

void setup(void)
{
  Serial.begin(9600);
  
  if(!bmp.begin())
  {
    Serial.print(KOMMENTAR + "Kein BMP085 gefunden ... Prüfe I2C Adresse!");
    while(1);
  }
  
  anzeigeDetails();
}

void loop(void)
{
  sensors_event_t event; // neues Sensor ereignis
  bmp.getEvent(&event);
 
  if (event.pressure)
  {
    Serial.print(event.pressure); // Luftdruck in hPa
    Serial.print(TRENNER);
    
    /* Calculating altitude with reasonable accuracy requires pressure *
     * sea level pressure for your position at the moment the data is     *
     * converted, as well as the ambient temperature in degress           *
     * celcius.  If you don't have these values, a 'generic' value of     *
     * 1013.25 hPa can be used (defined as SENSORS_PRESSURE_SEALEVELHPA   *
     * in sensors.h), but this isn't ideal and will give variable         *
     * results from one day to the next.                                  *
     *                                                                    *
     * You can usually find the current SLP value by looking at weather   *
     * websites or from environmental information centers near any major  *
     * airport.                                                           *
     *                                                                    *
     * For example, for Paris, France you can check the current mean      *
     * pressure and sea level at: http://bit.ly/16Au8ol                   */
     

    float temperature;
    bmp.getTemperature(&temperature);

    Serial.print(temperature); // Temperatur in Grad Celsius
    Serial.print(TRENNER);

    /* Then convert the atmospheric pressure, SLP and temp to altitude */
    /* Update this next line with the current SLP for better results */
    float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA; // 1013.25F Average sea level pressure is 1013.25 hPa
   
    Serial.print(bmp.pressureToAltitude(seaLevelPressure,
                                        event.pressure,
                                        temperature)); // Höhe in Meter
    Serial.println();
  }
  else
  {
    Serial.println(KOMMENTAR +"Sensor error");
  }
  delay(MESSINTERVAL);
}

Mit diesen Daten, wird dieses Diagramm erzeugt:

Luftdruck und Temperatur Diagramm mit  gnuplot
Luftdruck und Temperatur Diagramm mit gnuplot

Die gerade Linie im Diagramm, rührt daher das der PC sich automatisch in den Standby-Betrieb schaltet und damit die Serielle-Verbindung nicht mehr abgefragt wird.
Der dritte Wert der Daten ist die Höhe, die ändert sich nicht gross und wird deshalb nicht im Diagramm dargestellt. Wie wird bei gnuplot die 3. Y-Achse erzeugt? Geht das überhaupt?

Gnuplot der Temperaturen im Gefrierfach und Kühlschrank.

Zuerst wurde der Temperatursensor in das Gefrierfach und dann in den Kühlschrank gelegt (grüne Kurve). Der zweite Sensor, wurde außerhalb des Kühlschranks platziert (die rote Kurve).

Temperaturverlauf im Kühlfach und Gefrierteil des Kühlschranks
Temperaturverlauf im Kühlfach und Gefrierteil des Kühlschranks

Folgende gnuplot Datei ist dafür nötig:

set title "Temperaturverlauf im Kühlschrank" font "Times,18"
set ylabel "Temperatur in Grad/Celsius"
set xlabel "Messzeitpunkt am 26.06.13"
set xdata time # x-Achse wird im Datums/Zeitformat skaliert
set timefmt "%Y.%m.%d_%H:%M:%S" # Format Zeitangaben yyyy.mm.dd_hh:mm:ss
set format x "%H:%M" # Format für die Achsenbeschriftung
set yrange [-19:26] # die y-Achse geht von:bis
set zeroaxis # eine Null Linie

# Maximum und Minimum anzeigen
max_y = GPVAL_DATA_Y_MAX
set label 1 gprintf("Maximum = %g Grad/Celsius", max_y) at "2013.06.26_17:00:00",24 font "Times,12"
min_y = GPVAL_DATA_Y_MIN
set label 2 gprintf("Minimum = %g Grad/Celsius", min_y) at "2013.06.26_17:25:00",-15 font "Times,12"

set terminal png
set output "temperaturverlauf-kuehlschrank.png"plot "temperatur-kuehlschrank.txt" using 1:2 title "Zimmer Sensor" with lines, "" using 1:3 title "Sensor im Kühlschranki" with lines

set terminal aqua
replot

Diese Grafik liegen diese, mit dem Arduino gemessenen Werte zugrunde. Die Aussetzer in der Aufzeichnung rühren daher, das sich der MacBookAir nach einiger Zeit in den Sleep-Modus schaltet, dann kommen keine Daten aus der USB-Schnittstelle an. Da muss man sich dann noch was einfallen lassen.

Vergleich zweier Temperatursensoren DS18B20 mit gnuplot

Eine kurze Messung mit zwei an das Arduino-Board angeschlossene Temp.-Sensoren DS18B20 ergibt diese Daten.

Daraus läßt sich mit diesen gnuplot Befehlen

set title "Temperaturverlauf"
set ylabel "Temperatur in Grad/Celsius"
set xlabel "Messzeitpunkt"
set xdata time # x-Achse wird im Datums/Zeitformat skaliert
set timefmt "%Y.%m.%d_%H:%M:%S" # Format Zeitangaben yyyy.mm.dd_hh:mm:ss
set format x "%H:%M" # Format für die Achsenbeschriftung
set yrange [26:28] # die y-Achse geht von:bis
set terminal png
set output "temperaturverlauf.png"
plot "temperatur.log" using 1:2 title "Innen Sensor" with lines, "" using 1:3 title "Aussen Sensor DS18B20" with lines

diese Grafik plotten:

gnuplot zweier Temperatursensoren
gnuplot zweier Temperatursensoren

Die Sensoren sind mit +-0,5 Grad Celsius bei -10 bis +85 Grad angegeben.
Die Differenz beider Werte ergibt mit diesen gnuplot Befehlen:

set title "Temperatur Differenz zweier Sensoren"
set ylabel "Temperatur Differenz in Grad/Celsius"
set xlabel "Messzeitpunkt"
set xdata time # x-Achse wird im Datums/Zeitformat skaliert
set timefmt "%Y.%m.%d_%H:%M:%S" # Format Zeitangaben yyyy.mm.dd_hh:mm:ss
set format x "%H:%M" # Format für die Achsenbeschriftung
set yrange [-1:1] # die y-Achse geht von:bis
set zeroaxis # die 0 Linie
set terminal png # erzeugt eine PNG Datei
set output "differenztemperaturverlauf.png" # Name der PNG Datei
plot "temperatur.log" using 1:($2-$3) title "Temperatur-Differenz" with lines
set terminal aqua # wieder auf Terminal
replot # nochmal in Terminal plotten

folgendes Ergebnis.

Differenz zweier Temperaturmessungen
Differenz zweier Temperaturmessungen

Mit welchem gnuplot Befehl bekomme ich eine horizontale Linie bei 0,5 und -0,5 Grad hin, die mit min und max Beschriftet ist? Ok, hier die Lösung.