PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mikrocontroller ins WLAN einbinden



anr31
15.12.2014, 15:58
Guten Tag!

ich möchte einen Mikrocontroller ins WLAN einbinden und dann darüber als erste Übung ein paar LEDs, die am uC hängen, steuern. Am liebsten per Android-App. In der Android- als auch in der uC-Programmierung habe ich bereits einige Erfahrung, jedoch nicht im Bereich Ethernet oder WLAN.

Folgendes habe ich mir gedacht: Der Mikrocontroller verbindet sich per WLAN mit dem heimischen Router. Per Smartphone verbinde ich mich dann mit dem uC und toggle ein paar LEDs. Später möchte ich den Mikrocontroller mal als Server benutzen auf dem Daten gespeichert werden können, die von mehreren Benutzern über eine App abgerufen und auch verändert werden können. Aber ich möchte mir erstmal die Grundlagen aneignen.

Das sind meine Fragen:
zur Hardware(möglichst günstig!): Welche Hardware benötige ich? Habe ein paar Atmega 88A, die dürften vermutlich ein wenig zu klein sein oder? Was für ein WLAN Modul ist empfehlenswert?
zur Software: wie bekomme ich eine Verbindung zwischen uC und Router hin? TCP/IP? Wie implementiere ich das konkret?(Beispiel-Code?) Wie bekomme ich eine Verbindung von Smarthphone zu uC hin?
Ist es am Anfang erstmal am einfachsten auf dem uC einen Webserver zu implementieren, welche dann im Browser aufgerufen werden kann?

Ich würde gerne soviel wie möglich selbst machen, da ich dabei ja schließlich etwas lernen möchte.

Vielen Dank für eure Hilfe!

Valen
15.12.2014, 16:47
Diese Modulen die Seit den Sommer bekannt geworden sind sind ganz Billig. Wenn man sie aus China kommen last, weniger Euros als Finger an deiner Hand. Und sehr einfach mit ein Mikrocontroller zu steuern (Serielle Schnittstelle). Und ziemlich klein aber fressen Strom (200-300 ma). Den uC davon kann man eben selbst programmieren.


http://hackaday.com/tag/esp8266/

https://github.com/esp8266/esp8266-wiki/wiki

redround
15.12.2014, 16:49
Am einfachsten dürfte es fast mit einem Arduino gehen. Dafür gibt es extra Ethernet und WiFi shields. Ich persönlich mag den DigiX: http://shop.cboden.de/Digistump/DigiX/DigiX.html der hat WiFi bereits an Bord. Da sollte ein fertiger Webserver eigentlich schon mit drauf sein - muss ich aber selbst erst mal testen: http://digistump.com/wiki/digix/tutorials/wifi

In der IDE gibt es auch einige Beispiele für einen Webserver auf so einem Ding. Wenn Du die fertigen Bibliotheken nicht verwenden willst, kannst Du dort aber zumindest nachlesen, wie es geht ;-)

anr31
16.12.2014, 00:32
Hallo, vielen Dank für eure Antworten!


Diese Modulen die Seit den Sommer bekannt geworden sind sind ganz Billig. Wenn man sie aus China kommen last, weniger Euros als Finger an deiner Hand. Und sehr einfach mit ein Mikrocontroller zu steuern (Serielle Schnittstelle). Und ziemlich klein aber fressen Strom (200-300 ma). Den uC davon kann man eben selbst programmieren.
http://hackaday.com/tag/esp8266/
https://github.com/esp8266/esp8266-wiki/wiki
Das hört sich sehr gut an für läppische 3 Euro! Ich habe aber noch ein paar Fragen: der ESP8266 stellt eine WLAN Verbindung bereit und kann dann per UART mit meinem uC verbunden werden? Kann ich den ESP8266 auch mit meinem Router verbinden um von theoretisch überall auf der Welt auf ihn zugreifen zu können? Wie genau läuft ein Befehl ab, z.B. das togglen einer LED? Android Handy->ESP8266 (per TCP/IP) ->uC(per UART)->Led an?

Peter(TOO)
16.12.2014, 01:56
Hallo,

1. der ESP8266 stellt eine WLAN Verbindung bereit und kann dann per UART mit meinem uC verbunden werden?
2. Kann ich den ESP8266 auch mit meinem Router verbinden um von theoretisch überall auf der Welt auf ihn zugreifen zu können?
3. Wie genau läuft ein Befehl ab, z.B. das togglen einer LED? Android Handy->ESP8266 (per TCP/IP) ->uC(per UART)->Led an?

1. Ja, das ist die eine Seite des Moduls.
2. Ja, mit WLAN kannst du praktisch nur eine Verbindung zu einem WLAN-Router oder einem Gateway herstellen.
3. Das ist dann dein Bier! das WLAN übertragt nur deine Daten, von einem Punkt zu einem anderen. Ob du nun eine binäre 0 oder 1 für LED Aus/Ein senden willst oder on die LED bei "Bier" eingeschaltet und mit "Wein" ausgeschaltet wird, bleibt dir überlassen. Du musst nur dafür sorgen, dass beide Programme am Ende der Kette (App und µC) die selbe Sprache sprechen.

Das ist wie bei der Post. Die Post transportiert den Umschlag von A nach B. Was im Umschlag steckt, kümmert die Post nicht. Dieser Teil entspricht dem (W)LAN.
Den Brief kannst du in altägyptischen Hieroglyphen, chinesisch, englisch oder einer Geheimschrift verfassen, das ist für die Post unerheblich. Wichtig ist aber, dass der Empfänger die Zeichen deuten kann. Das gilt auch für dein Problem.

Technisch musst du zuerst eine Verbindung zu deinem Modul über das Internet aufbauen, dann kannst du die Daten übertragen, welche dann 1:1 am seriellen Port des ESP8266 ausgegeben werden. Der C muss dann diese Daten auswerten und entsprechend handeln.

Du solltest dich vielleicht erst einmal mit den Grundlagen der Netzwerktechnik etwas vertraut machen.

MfG Peter(TOO)

Mxt
16.12.2014, 07:12
3. Das ist dann dein Bier! ... Du musst nur dafür sorgen, dass beide Programme am Ende der Kette (App und µC) die selbe Sprache sprechen.

Es gibt auch Varianten, wo man nur an einer Seite der Kette programmieren muss. Dafür braucht man aber etwas mehr Hardwarepower als bei einem Arduino.

Würdest du auf diese Seite gehen
http://beagleboard.org/Support/BoneScript/digitalWrite/
und ein Beaglebone Black wäre unter seiner Standard-IP-Adresse in deinem Netzwerk sichtbar, dann wäre oben auf der Seite das Feld "Did you know ? ..." nicht orange sondern grün und es stände da "Board detected ...".

Dann könnest Du weiter unten in dem Feld "Example" einfach auf "Run" klicken und eine LED am auf dem Board geht an. Insbesondere kann man auf jedem Smartphone, Tablett oder Computer in das Textfeld dort Befehle eingeben und das Board führt sie aus.

Das ist eine ganz andere Art der Programmierung als auf einem Arduino. Das Programm das dahintersteckt ist dieses
http://nodejs.org/

Kommt ganz drauf an, wohin sich das ganze entwickeln soll ...

Peter(TOO)
16.12.2014, 07:24
Hallo,

Es gibt auch Varianten, wo man nur an einer Seite der Kette programmieren muss. Dafür braucht man aber etwas mehr Hardwarepower als bei einem Arduino.
Gut, da hat einer die halbe Arbeit schon erledigt.
Allerdings musst du dann die vorgegebene Sprache dieses Anderen sprechen, damit es funktioniert.

Nur Port Ein/Aus geht meistens schon ganz ohne Programm mit dem Debugger.

MfG Peter(TOO)

Mxt
16.12.2014, 07:41
Hi,

also einmal hat der Fragesteller auch das hier geschrieben, das lies mich gleich an den Beaglebone denken

Später möchte ich den Mikrocontroller mal als Server benutzen auf dem Daten gespeichert werden können, die von mehreren Benutzern über eine App abgerufen und auch verändert werden können.

[Technische Erläuterung für Fortgeschrittene:]

Eine "vorgegebene Sprache des anderen" gibt es nicht, das ist nur eine Webseite. Auf dem Server (also dem Board) können die Scripts natürlich auch Programme in belibiegen Sprachen aufrufen. Normalerweise schreibt man sich zur Bedienung ja eine Webseite mit ein paar Buttons. Diese Demoseite ist etwas raffinierter gemacht, da hinter dem Run-Button kein fester Code auf dem Server hinterlegt ist. Vielmehr ist das Textfeld über einen Websocket an den Server gebunden. Wenn der Run-Button geklickt wird, wird auf dem Server das Javascript aus dem Textfeld im Browser des Clients ausgeführt ...

Peter(TOO)
16.12.2014, 08:18
Hallo,

Eine "vorgegebene Sprache des anderen" gibt es nicht, das ist nur eine Webseite. Auf dem Server (also dem Board) können die Scripts natürlich auch Programme in belibiegen Sprachen aufrufen. Normalerweise schreibt man sich zur Bedienung ja eine Webseite mit ein paar Buttons. Diese Demoseite ist etwas raffinierter gemacht, da hinter dem Run-Button kein fester Code auf dem Server hinterlegt ist. Vielmehr ist das Textfeld über einen Websocket an den Server gebunden. Wenn der Run-Button geklickt wird, wird auf dem Server das Javascript aus dem Textfeld im Browser des Clients ausgeführt ...

Wo ist da jetzt der Widerspruch?

Entweder verwende ich etwas fertiges von einem anderen oder ich schreibe selbst etwas für den Client und lade es irgendwie auf den Client. Dabei spielt es keine Rolle ob ich das in den Client ins ROM schreibe oder ein Script runter lade und ausführen lasse.

In dem Fall mit dem Webbrowser muss ich mich an die Vorgaben von Javascript und den Mechanismus der Webseite halten.

MfG Peter(TOO)

Mxt
16.12.2014, 08:35
Wo ist da jetzt der Widerspruch?

Genau darin. Entweder man schreibt etwas für den Client oder nicht.

Man braucht kein Javascript, das ist nur die Sprache im Beispiel. Man braucht keinen Mechanismus der Webseite. Man kann eine LED einschalten, einfach dadurch, dass man eine Webseite aufruft (REST). Es gibt dann einfach eine URL für LED-an und eine für LED-aus. Das geht auch mit Clients, die man evttl. gar nicht selbst programmieren kann, z.B. EBook Reader.


[Nachtrag:]
Die Webseite(n) muss man natürlich schreiben. Und die Clients müssen http können. Das ist alles.

Valen
16.12.2014, 09:37
... Kann ich den ESP8266 auch mit meinem Router verbinden um von theoretisch überall auf der Welt auf ihn zugreifen zu können? Wie genau läuft ein Befehl ab, z.B. das togglen einer LED? Android Handy->ESP8266 (per TCP/IP) ->uC(per UART)->Led an?Ich habe bis jetzt nur einiger gekauft, aber noch nicht mit rum gespielt. Also muss ich dich auf google hinwiesen fur weitere detail info. Den chip ist ein microcontroller mit eingebautem wlan radio. Leider ist die chip dokumentation bis jetzt nebelartig: im prinzip nicht von NDA frei gegeben (geleckt). Es ist aber teilweise aus die Chinesische sprache umgewandelt.

Den esp8266 kann man selbst programmieren mif den espressif toolchain sdk, und so autonom seiner wlan schnitstelle und gpio benutzen lassen.( Sehe speziell den letzte link den ich im letzten beitrag gegeben habe. Irgend wo gibt es dort schon ein blinky code beispiel.) Es hat aber schon firmware das ein externe microcontroller uber UART ein verbindung zu dein wlan erstellen last. Dafur muss die ext. Mikrocontroller bestimte AT kommandos senden und ihre ruckmeldungen interpretieren. Ob es schon kommandos gibt die den gpio pins einstellt habe ich noch nicht verstanden. (Einige pins werden aber im bootloader prozess verwendet den firmwareupdate quelle zu wahlen)

Die AT kommandos erstellen ein verbindung zu den ssid von dein (heim) wlan router. Wenn das gelungen ist kannst du ein verbindung erstellen zu jeder IP (v4) adresse und port uber tcp/udp protokoll das deinen router erreichen kann. Mit portforwarding richtig eingestellt auf dein router solltest du dein esp8266 im heimnetzwerk erreichen konnen von wo auch immer auf das netz. Was du dein microcontroller oder android client senden oder empfangen last ist an ihn und den server. Also Peter(TOO) hat das schon deutlich beschrieben: sie sollen sich verstehbar machen.

Mxt
16.12.2014, 10:37
Also um die Dinge etwas zusammenzufassen:

Nur die LED über TCP schalten kann man mit so einem billigen WLAN Modul machen.

Das mit dem Server, den Benutzern und den Daten ist so eine Sache. Wie viele Daten ? Sowas wie ein Dateiupload ? Mehrere Benutzer gleichzeitig ?

Es gibt diverse kleine Webserver für Mikrocontroller. Da kenne ich mich nicht so aus. Ob die dann mit dem WLAN Modul laufen ist eine andere Geschichte. Natürlich kann man sich auch selber einen Webserver schreiben, dann muss man aber einiges an Doku zu den Protokollen lesen.

Abhängig von der benötigten Servergröße wäre dann ein kleiner Linux Rechner, wie der Raspi, die leistungsfähigere Lösung. Da ist die Größe dann nach oben offen, man kann immer auf was größeres wechseln. Webprogrammierung für Linux gibt es wahrscheinlich in tausend verschiedenen Arten, das oben gezeigte war nur ein einfaches Beispiel, was gut mit Mobilen Clients zusammen arbeitet.

Einen Mikrocontroller kann man für IO-Aufgaben dann immer noch an den Linux Rechner hängen.

Wie gesagt, es hängt alles davon ab, wie weit das über eine LED hinaus wachsen soll ...

oberallgeier
16.12.2014, 10:57
... Mikrocontroller ins WLAN einbinden ... LEDs ... steuern ... Später ... Mikrocontroller mal als Server benutzen ... Daten ... von mehreren Benutzern ... abgerufen und auch verändert ...
Ich würde gerne soviel wie möglich selbst machen, da ich dabei ja schließlich etwas lernen möchte ...
Hallo anr31,

willkommen im Forum.

Bist Du sicher, dass die Aufgabe von einem Mikrocontroller erledigt werden kann? Ich bin nicht der große Kenner von WLAN-Technologien und Anwendungsmöglichkeiten, aber hierfür, insbesondere für Datenspeicherung und -Verarbeitung/-Änderung scheint mir ein Mikrocontroller üblicher Ausrichtung doch etwas sehr schwachbrüstig. Das klingt ja eher als Aufgabe für die man einen "richtigen" Rechner benötigt.

Wäre es denkbar dass Du - auch wenn Du soviel wie möglich selbst machen möchtest - Dir als Controller einen raspberry pi zulegst? Für den ist die Anbindung ans (häusliche) WLAN wohl nicht so schwer (hab sogar ich geschafft). Und der hat auch eine Leiste mit GPIOs - die sind genau für so etwas wie LEDs dranhängen und z.B. über WLAN anknippsen gemacht. Dass dann alles über Linux läuft ist aber möglicherweise etwas, das nicht in Deinen Plan passt.