ESP8266 debuggen

Über diesen netten Chip habe ich bereits einen Artikel geschrieben. Lief problemlos, weil die Bauteile „zusammengepasst“ haben. Ich habe mir 2 Platinen gebastelt die Raumtemperatur und Feuchtigkeit messen. Den „Weg“ zu dieser Wetterstation habe ich auf Github abgelegt – vielleicht hilft es ja jemandem weiter

2015-10-30 20.08.48
Von oben
2015-10-30 20.09.01
Und von unten

Schwer motiviert habe ich mir noch ein paar Arduino Nanos und ESP8266 bestellt und damit hat erstmal nichts geklappt! Das ist im ersten Moment ärgerlich, hat aber auch den Vorteil, daß man sich näher mit der Materie auseinander setzen muß.

Den Chip auf Breadboards benutzen

Durch den geringen Abstand der Pins kann man den ESP8266 schlecht mit Breadboards verwenden. Deshalb mußt Du vor jeglicher Art von Bastelei einen Adapter löten um Dein Leben leichter zu machen.

Benötigt werden ein Stück Lochraster Platine, eine Buchsenleiste und eine Steckerleiste mit jeweils 8 Pins. Die Steckerleiste besteht aus einem Kunststoffteil und Pins. Ich habe den Kunststoffteil ganz nach oben gedrück und dann falsch herum eingelötet. Die Buchsen ganz normal einlöten und dann auf der Unterseite verbinden. Mangels Draht und Bock habe ich die Brücken mit dem Lötkolben gemacht. Das dauert keine 10 Minuten und der Komfortgewinn ist enorm!

adapter

Probleme mit der Spannungsversorgung

Die ESP’s laufen mit 3,3V. Der Arduino hat einen 3,3V Pin der je nach verbautem Spannungsregler nicht genügend Strom liefert (wie meine neuen Arduinos). Das Problem wird sichtbar wenn die LED’s am ESP8266 dunkler werden oder die Spannung zusammenbricht. Mit einem externen Spannungsregler wie dem. AMS1117 läßt sich das Problem beheben.

Übertragungsraten

Mein erster Satz ESP8266  hat mit einer Symbolrate 9600 Baud gearbeitet. Die nächste Charge mit 115200, Baud die schafft mein neuer Satz Nanos, aber nicht die Alten.

Laut diesem Post läßt sich die Baudrate mit einer aktuellen Firmware setzen. Muß ich unbedingt ausprobieren!

Firmware ist vom Hersteller angepasst

Der gesamte Bereich Firmware ist ungemein spannend. Der ESP8266 wurde von der Firma ESPRESSIF erfunden oder produziert oder kopiert. Mein 2. Satz Chips war von der Firma AI-Thinker, die eine eigene, leicht inkompatible Firmware auf die Geräte gespielt hat und die ich nicht will weil die Sketches nicht damit laufen!

Um angenehmer mit den Chips  rumzumachen habe ich mir einen USB TTL Konverter gekauft (kostet zwischen 3€ und 8€). An Software wird nur die unsägliche Arduino IDE benötigt. Konfiguration ist unter Linux nicht nötig. Einfach die Arduino IDE starten und den Serial Monitor öffnen. Hier solange mit der Baudrate spielen, bis man auf das Kommando AT ein OK zurückbekommt. Hier mal ein Auszug aus einem solchen seriellen Gespräch – meine Kommandos sind fett, die Antworten kursiv:

AT
OK
AT+GMR 
AT version:0.30.0.0(Jul 3 2015 19:35:49)
SDK version:1.2.0
Ai-Thinker Technology Co.,Ltd.
Build:1.2.0.A Aug 7 2015 17:21:44
OK

Dies ist die Antwort der inkompatiblen Firmware. Eine schöne Übersicht über Kommandos habe ich bei Iteadstudio gefunden.

Eine nette Anleitung um die Firmware loszuwerden gibt es im Wiki von mikrocontroller.net.

Zusammengefasst (und darum geht’s in dem Beitrag) braucht man das Esptool zum Flashen und eine aktuelle Firmware. Der Chip muß dazu auch besonders beschaltet werden. Ronny Simon von Simtronyx hat das auf seinem Blog sehr nett beschrieben. Wenn die Schaltung steht alle Serial Monitors schließen und kurz Masse an Reset legen. In das Verzeichnisse der Firmware wechseln und mit esptool flashen

ms@w530: /tmp/esp_iot_sdk_v0.9.5/bin$ sudo esptool.py -p /dev/ttyUSB2 write_flash 0x00000 boot_v1.2.bin 0x01000 at/user1.512.new.bin 0x3e000 blank.bin 0x7e000 blank.bin
Connecting...
Erasing flash...
Wrote 2048 bytes at 0x00000000 in 0.2 seconds (81.7 kbit/s)...
Erasing flash...
Wrote 211968 bytes at 0x00001000 in 20.5 seconds (82.7 kbit/s)...
Erasing flash...
Wrote 4096 bytes at 0x0003e000 in 0.4 seconds (85.6 kbit/s)...
Erasing flash...
Wrote 4096 bytes at 0x0007e000 in 0.4 seconds (85.6 kbit/s)...
 
Leaving...

Zumindest bei mir hat danach alles wirklich super funktioniert 🙂

Alternative Firmware

Ein paar ziemlich coole Leute bieten eine eine Firmware an, die das Ausführen von LUA Script ermöglicht. Eine Anleitung gibts hier. Eine einfache Möglichkeit um an angepasste Firmware zu gelangen ist dieser Build Service. 

 

Dies waren soweit meine Probleme mit dem netten Chip. Falls neue auftreten werde ich diesen Beitrag entsprechend erweitern.

Arduino mit Wlan Modul ESP8266

Vor ca. 9 Monaten hat mein Feedreader mir einen interessanten Artikel präsentiert. Er handelte von einem Elektronik-Modul namens ESP8266 der TCP/IP Kommunikation über WLAN mit Arduino Controllern ermöglicht. Low-Level Geschichten interessieren mich normalerweise nicht, weil es meist aufwändig und kostspielig war die Hardware ins Netz zu bringen- vor allem ohne Kabel. Dank der netten Ebay Händler aus Shenzhen bekommt man die Hardware für solche Unterfangen inzwischen unter 10€. Ich hatte das Teil sofort bestellt, aber habe es nie geschafft es in Betrieb zu nehmen weil immer was dazwischen kam und mir die Muße fehlte – bis vor ca. 1h. Warum meine ersten Versuche das Teil in Betrieb zu nehmen fehlschlugen kann ich leider nicht mehr sagen. Als ausgebildete Fachkraft bin ich zu 100% sicher die Schaltung 1:1 nachgebaut zu haben aber es wollte nicht klappen. Aufgrund solcher Gedächtnisslücken schreibe ich jetzt diesen Artikel:).

 

 

Auf der Website Instructables.com bin ich auf eine vergleichbare Anleitung gestoßen, die eine Verkabelung ohne Spannugnsteiler und Stützkondensator vorsieht und auf einmal hatte es funktioniert! In dem Tutorial dreht sich alles darum per Http Request Sensordaten von einem DS1820 Temperatursensor per HTTP auf eine recht interessante Seite namens Thingspeak zu übertragen. Ich habe den Code ein wenig angepasst, da ich weder die Hardware dafür besitze noch die Libraries einbinden wollte. Wenn Du das nachbauen möchtest benötigst Du einen Account auf der Seite und mußt den Präprozessor neben SSID und Passwort mit einen API-KEY für Thingspeak füttern.

#include
#include 
 
 
#define SSID "SSID"
#define PASS "PASSWORD"
#define IP "184.106.153.149" // thingspeak.com
String GET = "GET /update?key=[APIKEY]]&field1=";
SoftwareSerial monitor(10, 11); // RX, TX
 
void setup()
{
  monitor.begin(9600);
  Serial.begin(9600);
 
  sendDebug("AT");
  delay(5000);
  if(Serial.find("OK")){
    monitor.println("RECEIVED: OK");
    connectWiFi();
  }
}
 
void loop(){
 
  //float tempC = sensors.getTempCByIndex(0);
 
  char buffer[10];
  String tempF = dtostrf(989, 4, 1, buffer);
  updateTemp(tempF);
  delay(60000);
}
 
void updateTemp(String tenmpF){
  String cmd = "AT+CIPSTART=\"TCP\",\"";
  cmd += IP;
  cmd += "\",80";
  sendDebug(cmd);
  delay(2000);
  if(Serial.find("Error")){
    monitor.print("RECEIVED: Error");
    return;
  }
  cmd = GET;
  cmd += tenmpF;
  cmd += "\r\n";
  Serial.print("AT+CIPSEND=");
  Serial.println(cmd.length());
  if(Serial.find(">")){
    monitor.print(">");
    monitor.print(cmd);
    Serial.print(cmd);
  }else{
    sendDebug("AT+CIPCLOSE");
  }
  if(Serial.find("OK")){
    monitor.println("RECEIVED: OK");
  }else{
    monitor.println("RECEIVED: Error");
  }
}
void sendDebug(String cmd){
  monitor.print("SEND: ");
  monitor.println(cmd);
  Serial.println(cmd);
} 
 
boolean connectWiFi(){
  Serial.println("AT+CWMODE=1");
  delay(2000);
  String cmd="AT+CWJAP=\"";
  cmd+=SSID;
  cmd+="\",\"";
  cmd+=PASS;
  cmd+="\"";
  sendDebug(cmd);
  delay(5000);
  if(Serial.find("OK")){
    monitor.println("RECEIVED: OK");
    return true;
  }else{
    monitor.println("RECEIVED: Error");
    return false;
  }
}

Die Verdrahtung gestaltet sich sehr einfach und funktioniert mit meinem Arduino UNO- und dem Arduino NANO 328-Klon:

ESP8266 Arduino
TXD RXD
CH_PD VCC 3V3
VXX VCC 3V3
GND GND
RXD TXD

Die Pins auf dem WLAN Chip sind so belegt:

Bild von http://mcuoneclipse.com/2014/10/15/cheap-and-simple-wifi-with-esp8266-for-the-frdm-board/

Hier 2 Bilder die zeigen wie die PINS auf den Arduinos herausgeführt sind:

 

Der Arduino Nano mit 328 Mega Chip

uno

Tükisch waren 2 Dinge an der Geschichte:

  1. Nmap findet das Gerät nicht im Netzwerk. Ich bin der Sache noch nicht nachgestiegen, aber mit <ahref=“http://linux.die.net/man/8/arp“>arp ist es kein Problem. Das muß ich mir anschauen
  2. Der Arduino kann nur programmiert werden, wenn man das WLAN Modul spannungsfrei macht. Auch ein Trennen der Verbindungen WLAN Modul Arduino und Arduino PC erleichtert das übertragen…

In den kommenden Tagen werde ich wohl ein kleines Programm schreiben, daß auf Port 80 lauscht und entsprechenden POST Requests analoge und digitale Ports schaltet und Stati ausgibt. Auch eine Anbindung an mein Openhab wäre sehr nett…

Debian Wheezy auf dem Raspberry Pi installieren

Seit etwa einem Jahr nutze ich einen Raspberry Pi um mir damit Filme und Serien anzuschauen.Läuft ganz gut und mit OpenElec etwas flüssiger in der Menüführung als Raspbmc.Wenn weitere Dienste laufen wird das Filmvergnügen leider ein wenig ausgebremst weshalb ich mir ein zweites Gerät zugelegt habe.Auf dem neuen Raspberry Pi soll nun Debian seine Dienste verrichten und mir als Pyload Server und digitales Tor zu meiner Bude via sshd dienen.

Ich habe keine Lust den Pi mit Monitor und Tastatur zu schmücken, deshalb wird das System als Image auf eine SD Karte geschrieben und gut ist.

Die Debian Version für den Pi nennt sich Raspbian und läßt sich auf der Homepage des Projekts downloaden.

Eine Variante von Debian für den Pi nennt sich Raspbian und läßt sich auf der Homepage des Projekts downloaden.

1. Image auf die SD Karte schreiben, Pi starten

Die Blocksize war in der offiziellen Anleitung leider falsch angegeben.

root@debian:/home/ms/Downloads# dd bs=1M if=2014-01-07-wheezy-raspbian.img of=/dev/mmcblk0
root@debian:/home/ms/Downloads# sync

Pi vom Stromnetz trennen, Karte einstecken. Wenn nur eine rote LED leuchtet ist etwas schief gegangen
Nun dem Pi ein wenig Zeit zum booten geben und per nmap nach neuen Geräten suchen

ms@debian:~$ nmap -sP 192.168.0/24

2. Initiale Konfiguration

Per SSH einloggen, Konfiguration ausführen

#default password raspberry
ms@debian:~/Downloads$ ssh pi@192.168.0.110
pi@raspberrypi ~ $ sudo raspi-config

Erstmal Vim und Screen installieren

pi@raspberrypi ~ $ sudo su
root@raspberrypi:/home/pi# apt-get update
root@raspberrypi:/home/pi# apt-get install vim screen

Swap anpassen

root@raspipy:/home/pi# echo "CONF_SWAPSIZE=512" > /etc/dphys-swapfile
root@raspipy:/home/pi# dphys-swapfile setup
want /var/swap=512MByte, checking existing: deleting wrong size file (104857600), generating swapfile ... of 512MBytes
root@raspipy:/home/pi# dphys-swapfile swapon

3. NFS Freigaben einrichten

Ich nutze für Dateifreigaben nur noch nfs, das ist schneller als Samba und man hält sich den M$ Mist aus dem Netz. Mußte den Daemon ein wenig anpassen (Kernel Version 3.10 vom 2014-01-07).

NEED_STATD auf YES setzen in /etc/init.d/nfs-common
Einmal alles bezüglich NFS neustarten oder rebooten.

Die Shares einrichten und mounten (die uninteressanten Dinge aus fstab habe ich entfernt):

root@raspipy:/home/pi# cat /etc/fstab
192.168.0.50:/media_movies /media/nfs_movies nfs auto,rw 0 0 
192.168.0.50:/media_serien /media/nfs_serien nfs auto,rw 0 0
192.168.0.50:/downloads /media/downloads nfs auto,rw 0 0
root@raspipy:/home/pi# mkdir /media/nfs_movies
root@raspipy:/home/pi# mkdir /media/nfs_serien
root@raspipy:/home/pi# mkdir /media/downloads
root@raspipy:/home/pi# mount -a

Das wars soweit mit der Einrichtung von Debian. Ich habe zusätzlich den Port 22 am Router auf den Pi weitergeleitet und in /etc/ssh/sshd_config Logins mit Passwort verboten. Demnächst gehts weiter mit der Einrichtung von Pyload oder was Anderem wenn es mir nicht taugt :).

Wireless Access Point mit DD-WRT

Netzwerkequipment ist die Infrastruktur unserer vernetzten Welt. Sie muß sicher sein, tadellos funktionieren und so sicher wie nur möglich sein. Nichts ist ärgerlicher als eine instabile Internetverbindung oder Router die regelmäßig Wartung und Pflege benötigen. Der Nachteil von solch guter Hardware ist, daß man schnell vergisst was man wie eingestellt hat und nach Monaten oder Jahren grübelnd vor kleinen schwarzen oder grauen Kisten steht :). Womit wir schon beim Thema meines Posts sind. Vor einem Jahr habe ich mir aus der Not heraus einen Buffalo AirStation WZR-HP-G300NH2EU NFINITI HighPower Gigabit Wireless-LAN Router 300Mbps als WLAN Repeater konfiguriert. Auf dem Gerät läuft DD-WRT.

Da ich in diesem Zeitraum nichts mit dem Gerät gemacht habe brauchte es ein wenig Zeit bis der Access Point lief. Deshalb für die Nachwelt und Zukunft ein paar Anmerkungen und Screenshots zu den Einstellungen.
Der Access Point soll weder routen noch als DHCP Server dienen. Ich will alle Geräte in 192.168.0.0/24 haben. Die Einrichtung ist recht schnell erledigt.


Zuerst muß unter Setup -> Basic Setup das Grobe eingerichtet werden.

Grundlegende Einrichtung
Grundlegende Einrichtung

Die Wan Verbindung wird über den Router abgewickelt der auch das Gateway macht. Da ich inzwischen fast nur noch DHCP nutze muß das als Forwarder eingerichtet werden. 2 DHCP Server im Netzwerk machen keinen Spaß und in meinem Fall wenig Sinn.

 

Im Anschluss die Eckdaten des WLAN einrichten

Punkt WLAN

 

Und für Sicherheit sorgen

WLAN Security

 

Da die Kiste nicht routen soll muß noch der Punkt Routing unter Administration ausgeschaltet werden…