mikrocontroller.net

Forum: Projekte & Code Sipdial per ESP8266 an Fritzbox


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Jürgen L. (temp1234)
Datum:
Angehängte Dateien:

Bewertung
2 lesenswert
nicht lesenswert
Christion T. hat neulich im Beitrag:
Beitrag "Türklingel per ESP32 (WLAN, SIP) an Fritzbox"

den Code für seine ESP Klingel veröffentlicht. Das hat mich dazu 
gebracht auch mal wieder etwas in dieser Richtung zu machen. Allerdings 
benötige ich den Code um per Sip die Fritzbox klingeln zu lassen 
ausdrücklich nicht in Verbindung mit dem ESPxxx. Bisher mache ich das 
über einen Asterisk-Server der auf meinem NAS läuft. Nun soll so etwas 
in den Code meines selbst geschriebenen Servers für die Heimautomation. 
Allerdings ist Christians Code zu sehr von der ESP Infrastruktur 
abhängig. Das Anzupassen kommt einer Neuentwicklung gleich. Das habe ich 
dann gemacht. Im angehängten Code ist eine C++ Classe Sip enthalten die 
bis auf die Funktionen Sip::SendUdp(), Sip::Random(), Sip::Millis()und 
Sip::MakeMd5Digest() Plattform unabhängig ist. Entwickelt habe ich das 
als Windows-Konsolen Programm. Das kann ich aber aus lizensrechtlichen 
Gründen nicht veröffentlichen. Deshalb hier das ganze als Arduino ino 
für den Esp8266.
Das ist wohl gemerkt kein fertiges Projekt für ahnungslose Bastler. Es 
ist nur als Demo zu verstehen. Nach dem Reset und Connecten an die 
Fritzbox wählt der ESP die festgelegte Nummer und legt sich dann nach 
15s in den Tiefschlaf.
Wer etwas sinnvolles damit machen will, muss den Rest dann noch selbst 
entwickeln.
Ich selbst nutze die Arduino IDE nicht, sondern eine makefile Umgebung 
wie ich sie heir schon mal beschrieben haben.
Beitrag "Re: ESP32 & ESP8266 etc ohne Arduino?"

Der gesamte Code der Sip-Klasse kommt ohne dynamischen Speicher aus. Es 
wird nur ein char Buffer für das Zusammenbauen der UDP Packete benötigt, 
den ich selbst nicht in der Klasse halte. Zu beachten ist weiterhin, 
dass sich die Klasse die Konfigurationsdaten die in der init-Funktion 
übergeben werden nicht buffert, die Pointer müssen deshalb über die 
Laufzeit gültig bleiben. Bei meiner Fritzbox kommt es oft vor, dass das 
erste UDP-Packet irgendwie verloren geht. Im Gegensatz zu Christians 
Code versuche ich das INVITE zu wiederholen wenn die Fritzbox nicht 
antwortet.

Autor: Marc G. (marcm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke,

nachdem auskommentieren/einkommentieren des return-werts in der 
Sip::Random() Funktion wegen folgendem Fehler :
sipdial.ino: In member function 'uint32_t Sip::Random()':

sipdial:471: error: 'secureRandom' was not declared in this scope

   return secureRandom(0x3fffffff);


exit status 1
'secureRandom' was not declared in this scope

funktioniert dein Aduino-Sketch auf meiner NodeMCU. Auch wenn ich noch 
hier drüber gestolpert bin und der Fehler anscheinend im Fritz!OS 6.83 
meiner 7390 immernoch nicht behoben ist... :
https://www.heise.de/forum/heise-online/News-Kommentare/AVM-veroeffentlicht-Fritz-OS-6-60/Seit-6-60-keine-Anmeldung-von-SIP-Nebenstelle-moeglich/posting-28864356/show/

Grüße
Marc

Autor: Jürgen L. (temp1234)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marc G. schrieb:
> nachdem auskommentieren/einkommentieren des return-werts in der
> Sip::Random() Funktion wegen folgendem Fehler :

Du solltest mal deine Entwicklungsumgebung aktualisieren. Aktuell ist 
Arduino ESP bei 2.4. Die Funktion war auch in 2.3 schon drin.

Du solltes aber besser nicht das auskommentierte Standard rand() 
verwenden ohne einen srand() mit einem zufälligen Wert. Anderenfalls 
erzeugt die rand() Funktion nach jedem Reset die gleichen Zahlen, was 
bei dieser Anwendung nicht besonders gut ist. Hier die Funktion wie sie 
in neueren Esp-Arduinos enthalten ist und die Hardware des ESP8266 
nutzt:
#define RANDOM_REG32  ESP8266_DREG(0x20E44) 
long secureRandom(long howbig) {
    if(howbig == 0) {
        return 0;
    }
    return RANDOM_REG32 % howbig;
} 

Marc G. schrieb:
> Auch wenn ich noch
> hier drüber gestolpert bin und der Fehler anscheinend im Fritz!OS 6.83
> meiner 7390 immernoch nicht behoben ist... :

Damit hat mich AVM auch schon zur Weißglut gebracht. Erst gingen kurze 
Passwörter nicht mehr, in aktuellen Firmware-Versionen auch keine kurzen 
Usernamen mehr. Es gab mal einen Stand, da musste man alle! 
Telefongeräte löschen, danach die Fritzbox zwingend neu starten und erst 
danach konnte man sie wieder einrichten. Das war bei mir zu Hause und 
bei beiden Fritzboxen in der Firma nachvollziehbar.

Autor: Marc G. (marcm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jürgen L. schrieb:
> Du solltest mal deine Entwicklungsumgebung aktualisieren. Aktuell ist
> Arduino ESP bei 2.4. Die Funktion war auch in 2.3 schon drin.

Ja das ist bestimmt der Grund. Es war eine alte Arduino 1.6.8 IDE mit 
der ESP 2.0 Bibliothek im Einsatz

Danke schön

Marc

: Bearbeitet durch User
Autor: Harald P. (haraldp)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für das schön schlanke Programm. Bei mir hat es - nach 
Anpassen auf meine Umgebung - sofort funktioniert. Ich wußte gar nicht, 
daß man das SIP-Protokoll auch mit Udp machen kann. Damit geht es m.E. 
viel einfacher als mit Tcp.
Harald

Autor: Jürgen L. (temp1234)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eigentlich ist bei Sip UDP Standard. Das macht es auch immer etwas 
komplizier wenn Router dazwischen sind.
Das Programm ist deshalb relativ schlank, weil ich nicht versucht habe 
das Protokoll komplett zu implementieren. Es ist auch nicht angedacht 
irgendwelche Audio-Daten zu verarbeiten. Allerdings kann man immerhin 
die Tastencodes des angerufenen Telefons abgreifen wenn man das will.

Autor: Obi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die Demo,  es funktioniert bei mir wie geplant. Ich bin 
relativ unerfahren in der Progarmmierung in C, deswegen bitte ich etwas 
um Verständnis für mein "Unverständnis"

Ich möchte ich einen Sip-Dial bei einem Druck eines Tasters auslösen, 
der ESP8266 soll anschließend nicht in den DeepSleep fallen sondern auf 
die nächste Betätigung warten.

Hat jemand einen Tipp für mich an welcher Stelle ich die Aktion auf die 
Tasterbetätigung einfüge? Das ganze muss ja auch im loop funktionieren 
so dass ständig der Pin abgefragt wird.

Obi

Autor: Nicki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ,

Ich finde die sip Türklingel echt gut
habe aber Probleme , vielleicht kann mir jemand helfen ?.

ich würde gerne den klingel Aufruf per void aufrufen
beispiel : wenn Taster gedrückt dann 3 Sekunden klingeln.

ich hab es versucht zu machen , hab es aber nicht hinbekommen.

wenn ich den loop in einen Unterprogramm packe , klingelt es unendlich.
leider verstehe ich das Programm nicht.

Bitte um Hilfe !

Danke.

Autor: Nicki (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Endlich !

Hab ich es hinbekommen ,
ich habe alle seriellen Debug ausgaben entfernt.
abfrage zwei taste , wenn taste gedrückt ---> meldung
Kein Deep Standby


viel Spass damit

Grüße Nicki

Autor: Veit D. (devil-elec)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

eine Frage dazu. Die Fritzbox wird hier rein per WLAN kontaktiert?
TR064 muss in der Fritzbox nicht aktiviert werden? Oder doch?
Danke im voraus.

Autor: Marc G. (marcm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der ESP wird hier als IP-Telefoniegerät an der Fritzbox angemeldet. 
Sonst muss da nichts weiter gemacht werden

Marc

Autor: Hegel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marc G. schrieb:

> Der ESP wird hier als IP-Telefoniegerät an der Fritzbox angemeldet.
> Sonst muss da nichts weiter gemacht werden


Kann das eine Einfallstor für Hacker sein?

Siehe Artikel auf Heide.de:

https://www.heise.de/newsticker/meldung/Bundesnetzagentur-stoppt-Abzocke-durch-Router-Hacking-4282164.html

Autor: Veit D. (devil-elec)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Veit D. (devil-elec)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marc G. schrieb:
> Der ESP wird hier als IP-Telefoniegerät an der Fritzbox angemeldet.
> Sonst muss da nichts weiter gemacht werden
>
> Marc

aha, sehr schön. Weil das Bsp. aus der c't 17/2018 nutzt TR064 und das 
muss erst aktiviert werden. Mit Raspi c't 17/2017 hatte ich es damals 
zum laufen bekommen.

: Bearbeitet durch User
Autor: Christian S. (schmitze)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

tolles Projekt ! Welchen 8266 habt Ihr denn dafür genommen und was als 
Akku und wie lange hält der ? Und wie lange dauert es, bis vom Klingeln 
am Tor dann die Telefone klingeln ?

Grüße

Christian

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin noch am Überlegen, ob ich das Ganze mit einem Pi oder ESP machen 
soll.
Ich möchte allerdings zwei Klingel (Zweifamilienhaus) unterstützen.#
Dazu bräuchte ich dann aber 2 ESPs, oder?

Gruß
Michael

Autor: Christian S. (schmitze)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...noch eine Frage: Wie wird der EPS denn geschaltet ? Nur mit dem 
klingeltaster an den Akku wird ja nicht reichen oder ? Ich würde den 
gerne am Tor draussen anbringen, weil die Funkklingel dort funktioniert 
meist nicht

Autor: Schmitze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...ich beantworte meine Fragen mal einfach selber, nachdem ich das ans 
Laufen bekommen habe:
ESP an Akku, Klingeltaster an GND und Reset. Zeit zwischen drücken des 
Tasters und Anfang Klingeln der Telefone nur ca. 1s !!! Sehr cool !!!

Autor: Meister Kleister (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mir gefällt die hier vorgestellt Lösung sehr gut, zusammen mit der 
Schaltung aus dem heise-Artikel funktioniert sie nach Eingabe der 
Zugangsdaten ohne Änderungen auf anhieb. Allerdings hört das klingeln 
nicht auf, wenn man den ESP komplett vom Strom trennt, ohne das Ende des 
15 Sekunden Programmzyklus abzuwarten.

Die Fritzbox klingelt allein mit ausgeschaltetem ESP munter weiter. Gibt 
es dafür eine passende Einstellung in der Fritzbox oder kann man den 
abgesetzten Befehl anpassen. Ich nutze den Rundruf (const char 
*sipdialnr   = "**9";) als Klingelzeichen.

Zum Thema Sicherheit: Man kann in der Fritzbox dem ESP dem Zugang vom 
oder ins Internet verbieten. Man kann in der SIP-Telefon-Konfiguration 
in der Fritzbox eine leere/keine Nummer für eingehende Nummern zuweisen 
und man kann alle ausgehenden Nummern abwählen. Der interne Ruf "**9" 
funktioniert weiterhin. Damit ist der ESP vor Einflüssen aus der Ferne 
relativ sicher. Im ESP ist nur das WLAN-Passwort und die Sipzugangsdaten 
gespeichert. Anders als bei der Heise-Klingel-Anleitung 
(https://shop.heise.de/katalog/esp-uberallklingel), bei  der zusätzlich 
das kritische Admin-Passwort auf dem ESP unverschlüsselt gespeichert 
werden muss.

Autor: Meister Kleister (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nochwas: Man kann in der Fritzbox eine "IP-Türsprechanlage" einrichten. 
Die unterstütz zum einen mehrere Klingeln, zum anderen kann man eine 
Code festlegen, mit dem sich die Türen öffnen lassen würden. Außerdem 
ist bereits die Telefonierfunktion in der Standardkonfiguration 
begrenzt.

Leider scheint das unaufhörliche Klingeln bei spontaner 
Stromunterbrechung ein Problem von SIP oder der Fritzbox zu sein. Auch 
mit einem Softwarephone, bei dem plötzlich die Netzverbindung getrennt 
wird, stoppt das Klingeln nicht von allein.

Autor: Hilgi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,


es funktioniert im Prinzip auf Anhieb! :)
Sehr toll, danke für diese Einführung.

Was nicht funktioniert, ist der Text den man übergibt.
An allen Endgeräten( DECT, ANALOG, WLAN ) erscheint im Display wahlweise 
die
"**621" oder "ESP8266_TEST", in keinem Fall ist die von mir im Code 
eingegebene Nachricht "TESTER" zu lesen.

In deinem Protokoll, stellst du dies so dar:
 AddSipLine("From: \"%s\"  <sip:%s@%s>;tag=%010u", pDialDesc, pSipUser, 
pSipIp, tagid);

Sonst funktioniert ja alles, dennoch frage ich mich -> wieso geht das 
nicht und wo is der Text geblieben? Ich kann den ja nirgends abfassen, 
theoretisch könnte/müsste man den ja dann aus Dial entfernen, wenn der 
eh nichts bringt...

Oder übersehe ich da was?


Grüße :)

Autor: Meister Kleister (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im DECT-Handteil werden die Namen so angezeigt, wie sie in der Fritzbox 
hinterlegt sind. Bei dir ist das wahrscheinlich "**621" [kein Name] oder 
"ESP8266_TEST". Der Sip-Name wird angezeigt, wenn dein Empfangsgerät die 
Sip-Daten auswertet. Ist bei mir mit einem Soft-Phone (PhoneLite) auf 
dem PC so, das wie der ESP als SIP-Telefon eingerichtet ist.

Autor: Alois N. (alois)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe eine kleine Platine entwickelt die in ein Siedle Haustelefon 
HT-511 passt. Wer Lust hat, kann die Schaltung gerne nachbauen.

Die Schaltung besteht aus einem AC/DC Netzteil das die 12V 
Wechselspannung in ca. 3,3V Gleichspannung zur Versorgung des ESP8285 
ESP-1 Moduls wandelt. Außerdem sitzen zwei AC-Optokoppler auf der 
Platine zur Abfrage von zwei Klingeltastern (getrennte Eingänge). 
Aufgrund der besseren Reichweite habe ich ein ESP8285 ESP-1 WLAN 
Funkmodul verwendet.

Die Versorgungsspannung habe ich an die Klemmen b und c des Siedle 
Haustelefons HT-511 angeschlossen. Den Eingang habe ich parallel an das 
Läutwerk (Summer) am Siedle Haustelefon HT-511 geklemmt.

Den Code habe ich von @Nicki verwendet:
https://www.mikrocontroller.net/attachment/371951/sip_klingel_ND.ino

Funktioniert prima :-)

Autor: Andreas G. (djmetro)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, hast du zufällig noch eine Platine übrig? Würde mich sehr 
interessieren.

Autor: Alois N. (alois)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas G. schrieb:
> Hi, hast du zufällig noch eine Platine übrig? Würde mich sehr
> interessieren.

Ja, hab ich. Du hast eine Nachricht von mir bekommen.

Grüße :)

Autor: Alois N. (alois)
Datum:
Angehängte Dateien:

Bewertung
1 lesenswert
nicht lesenswert
Ich habe den Code von Nicki erweitert und eine Türöffner-Funktion mit 
implementiert.

Wenn man einen Anruf von der Tür entgegen nimmt, wird das Drücken einer 
beliebigen Taste am Telefon jetzt erkannt.

Im SIP INFO-Paket steht die gedrückte Taste direkt im Klartext. Das 
Parsen und das Auslösen einer Aktion der Taste wurde im Code 
hinzugefügt.

Im Beispiel verwende ich als Ausgang GPIO14 für den Türöffner und die 
Taste "6" am Telefon zum Auslösen des Türöffners. Die Einschaltzeit für 
den Türöffner lässt sich ebenfalls einstellen.

Autor: Roger Z. (microplayer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht hilft es jemandem -
Ich versuche den Sketch auf ESP32 zu portieren (mit beschränktem 
Vorwissen) und nutze dabei die aktuelle (Mai 2019) Arduino IDE samt den 
aktuellen ESP32 1.0.1 Libraries.

Mir gelang es leider nicht, die originale Zeilen

// generate a 30 bit random number
uint32_t Sip::Random()
{
  // return ((((uint32_t)rand())&0x7fff)<<15) + 
((((uint32_t)rand())&0x7fff));
  return secureRandom(0x3fffffff);
}

gegen den ESP32 kompiliert zu bekommen, denn ich finde keine passende 
Library, die secureRandom() per #include für den ESP32 nutzbar macht.

Der ESP32 hat aber einen HW RND Generator, den man per esp_random(void) 
nutzt. Und so wird daraus:
// generate a 30 bit random number
uint32_t Sip::Random()
{
   return esp_random();
}
Damit kommt der Compiler jedenfalls klar.

Mein Bitte: Kann  einer der Wissenden hier bestätigen, dass esp_random() 
hier richtig eingesetzt ist? Ich freue mich auch über Hinweise, wie ich 
secureRandom() auf dem ESP32 doch noch ans Fliegen bekomme.

Danke vorab - Roger

Autor: Roger Z. (microplayer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim Portieren des Sketches auf ESP32 scheitere ich mangels C++ 
Kenntnissen an folgernder Fehlermeldung bezüglich Typkonvertierung.
Kann mir da jemand auf die Sprünge helfen?
Wo gleiche ich mit dem wenigsten Aufwand und Risiko den Typ an? In der 
Definition, im Aufruf und welchen Typ nehme ich? Danke, Roger

--------------------------------------------------------------------
/Volumes/data/Meine Geräte/Arduino UNO/Roger Test/ESP32_SIP_Tuerklingel/ESP32_SIP_Tuerklingel.ino: In member function 'int Sip::SendUdp()':
ESP32_SIP_Tuerklingel:439:13: error: invalid conversion from 'char*' to 'const uint8_t* {aka const unsigned char*}' [-fpermissive]
   Udp.write(pbuf, strlen(pbuf));
             ^
In file included from /Users/roger/Library/Arduino15/packages/esp32/hardware/esp32/1.0.1/libraries/WiFi/src/WiFi.h:39:0,
                 from /Volumes/data/Meine Geräte/Arduino UNO/Roger Test/ESP32_SIP_Tuerklingel/ESP32_SIP_Tuerklingel.ino:1:
/Users/roger/Library/Arduino15/packages/esp32/hardware/esp32/1.0.1/libraries/WiFi/src/WiFiUdp.h:65:10: note:   initializing argument 1 of 'virtual size_t WiFiUDP::write(const uint8_t*, size_t)'
   size_t write(const uint8_t *buffer, size_t size);
          ^
Mehrere Bibliotheken wurden für "WiFi.h" gefunden
 Benutzt: /Users/roger/Library/Arduino15/packages/esp32/hardware/esp32/1.0.1/libraries/WiFi
 Nicht benutzt: /Applications/Arduino.app/Contents/Java/libraries/WiFi
Bibliothek WiFi in Version 1.0 im Ordner: /Users/roger/Library/Arduino15/packages/esp32/hardware/esp32/1.0.1/libraries/WiFi  wird verwendet
exit status 1
invalid conversion from 'char*' to 'const uint8_t* {aka const unsigned char*}' [-fpermissive]

: Bearbeitet durch User
Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hier könnte funktionieren:
Udp.write((uint8_t *) pbuf, strlen(pbuf));

Sauberer wäre es, wenn pbuf vom Typ uint8_t* wäre, aber dann würde der 
Aufruf von strlen natürlich scheitern ...

Autor: temp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Roger Z. schrieb:
> // generate a 30 bit random number
> uint32_t Sip::Random()
> {
>   // return ((((uint32_t)rand())&0x7fff)<<15) +
> ((((uint32_t)rand())&0x7fff));
>   return secureRandom(0x3fffffff);
> }
>

wenn nichts hilft dann das auskommentierte benutzen:
return ((((uint32_t)rand())&0x7fff)<<15) + ((((uint32_t)rand())&0x7fff));
dann solltest du aber in der setup() folgenden Code anpassen:

...
  int i=0;
  for (i=0; i<100; i++)
    {
    if (WiFi.status() == WL_CONNECTED) 
      break;
    delay(100);
    Serial.print(".");
    }
...

ändern in:
 
  int i=0;
  for (i=0; i<10000; i++)
    {
    rand();
    if (WiFi.status() == WL_CONNECTED) 
      break;
    delay(1);
    if ((i%100)==0)
      Serial.print(".");
    }


Was für ein Random-Wert da am Ende herauskommt ist völlig egal. Nur wenn 
es immer der gleiche ist kommt die Fritzbox durcheinander. Da rand() 
nach dem Neustart aber gleiche Werte liefert ist das ein Problem. Mit 
der Änderung von oben wird der Wert davon abhängig wie lange der 
WLAN-Connect dauert. Das ist schon mal besser als nichts.

Autor: temp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch ein Hinweis. Den ESP32 an dieser Stelle zu benutzen mach nur Sinn, 
wenn der ESP32 nicht! in den Tiefschlaf geht. Die Zeit bis sich der 
ESP32 nach dem Reset wieder im WLAN befindet ist deutlich länger als 
beim ESP8622.
Für den Fall, dass sich der ESP32 dauerhaft im Betriebsmodus befindet 
geht das auch mit dem rand() ohne die Sonderbehandlung am Anfang, da 
dann der Zufallsgenerator nicht jedes mal mit dem Reset neu 
initialisiert wird.

Autor: Temp1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, das hört sich alles sehr gut an, ich interessiere mich für deine 
Platine, hast Du noch eine übrig.
Grüße

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.