{"id":890,"date":"2017-09-09T07:38:48","date_gmt":"2017-09-09T06:38:48","guid":{"rendered":"https:\/\/www.open4me.de\/?p=890"},"modified":"2017-10-15T17:57:42","modified_gmt":"2017-10-15T16:57:42","slug":"ai-thinker-a7-gsm-gps-und-esp8266","status":"publish","type":"post","link":"https:\/\/www.open4me.de\/index.php\/2017\/09\/ai-thinker-a7-gsm-gps-und-esp8266\/","title":{"rendered":"AI Thinker A7 (GSM, GPS) und ESP8266"},"content":{"rendered":"<p>Durch einen Hinweis auf einer anderen Webseite bin ich auf das <a href=\"http:\/\/www.ebay.de\/itm\/A6-A7-Proto-Shield-GPRS-GSM-Module-Adapter-Quad-band-Antenna-900-1800-1900MHZ\/272404911423?ssPageName=STRK%3AMEBIDX%3AIT&amp;var=571366478464&amp;_trksid=p2057872.m2749.l2649\">AI Thinnker A7<\/a> Modul gesto\u00dfen. Hierbei handelt es sich um ein GSM und GPS Modul f\u00fcr gerade mal 8\u20ac. In der oben verlinkten Variante mit Adapter-Platine ist das A7-Modul relativ leicht nutzbar. In folgenden Artikel zeige ich, wie man das Modul zusammen mit einem ESP8266 nutzen kann.<\/p>\n<p><!--more--><\/p>\n<p>Zwei Warnungen:<\/p>\n<ol>\n<li>Die mitgelieferte l\u00e4ngere Antenne ist laut einem Beitrag von <a class=\"yt-simple-endpoint style-scope yt-formatted-string\" href=\"https:\/\/youtu.be\/H7eBurjWC0k?t=202\">Andreas Spiess<\/a> <em>nicht<\/em> f\u00fcr GPS geeignet, da es sich um eine normale WLAN-Antenne handelt.<br \/>\nIch habe deshalb f\u00fcr 2\u20ac eine passive GPS-Antenne mitbestellt.<\/li>\n<li>Laut einem Datenblatt, ben\u00f6tigt der A7 zwar eine Versorgungsspannung von 5 V, aber die GPIOs sollten mit max. 2,8 V angesprochen werden. Andere Quellen gehen aber von 3,3 V aus.<br \/>\nWenn ihr den esp8266 nutzt, wird der A7 mit 3,3 V angesprochen, was m\u00f6glicherweise zu viel Spannung ist. In meinen Test funktionierte es jedoch ohne Probleme. Wer sicher gehen will, nutzt ein Level-Konverter inkl. einer 2,8 V Referenzspannung, die ihr aus einem entsprechenden Spannungsteiler konstruieren k\u00f6nnt.<\/li>\n<\/ol>\n<p>Da es leider sehr wenig Information bzgl. dem Betrieb an einem ESP8266 gab, stelle ich hier die relevanten Information inkl. Sourcecode zur Verf\u00fcgung. In diesem Artikel konzentriere ich mich auf die GPS Funktionalit\u00e4t.<\/p>\n<p>In diesem Beispiel nutzte ich ein Nodemcu-Board. Das Nodemcu und das A7-Board wird hierbei \u00fcber USB mit Strom versorgt.<\/p>\n<p><a href=\"https:\/\/www.open4me.de\/wp-content\/uploads\/ESP8266_A7_GSM_GPS-e1504938645753.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-895\" src=\"https:\/\/www.open4me.de\/wp-content\/uploads\/ESP8266_A7_GSM_GPS-1024x1018.jpg\" alt=\"\" width=\"660\" height=\"656\" \/><\/a><\/p>\n<p>Mit dem A7 wird \u00fcber zwei serielle Schnittstellen kommuniziert. Die erste Schnittstelle (11.5200 Baud, U_TXD und U_RXD Pins) dient zur Ansteuerung des A7. \u00dcber die zweite Schnittstelle (9.600 Baud, nur GPS Pin) werden die GPS Informationen im <a href=\"https:\/\/de.wikipedia.org\/wiki\/NMEA_0183\">NMEA<\/a>-Format zur\u00fcckgeliefert.<\/p>\n<p>Die 3 Pins werden folgenderma\u00dfen verbunden:<\/p>\n<table>\n<tbody>\n<tr>\n<th>A7<\/th>\n<th>Nodemcu<\/th>\n<\/tr>\n<tr>\n<td>U_TXD<\/td>\n<td>D6<\/td>\n<\/tr>\n<tr>\n<td>U_RXD<\/td>\n<td>D5<\/td>\n<\/tr>\n<tr>\n<td>GPS<\/td>\n<td>D7<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>Und noch mein minimalistischer Sourcecode:<\/p>\n<pre class=\"lang:c++ decode:true\">#include \"Arduino.h\"\r\n#include \"SoftwareSerial.h\"\r\n\r\nSoftwareSerial readerSerial(D6, D5); \/\/ RX, TX\r\nSoftwareSerial gps(D7, -1); \/\/ RX, TX\r\n\r\nunsigned long timeout = 0;\r\nString input = \"\";\r\nvoid setup()\r\n{\r\n\tSerial.begin(115200);\r\n\tdelay(3000);\r\n\tSerial.println(\"Started\");\r\n\treaderSerial.begin(115200);\r\n\tgps.begin(9600);\r\n\tinput.reserve(40);\r\n}\r\n\r\nvoid loop()\r\n{\r\n\t\/\/ If you receive no data, enable GPS Tracking\r\n\tif (timeout &lt; millis()) {\r\n\t\tSerial.println(\"Sending GPS enable\");\r\n\t\treaderSerial.print(\"AT+GPS=1\\r\\n\");\r\n\t\tresetTimeout();\r\n\t}\r\n\r\n\t\/\/ New GPS Data\r\n\tif (gps.available() &gt; 0) {\r\n\t\tresetTimeout();\r\n\t\tchar chr = (char) gps.read();\r\n\t\tinput.concat(chr);\r\n\t\tif (chr == '\\n') {\r\n\t\t\tprocess(input);\r\n\t\t\tinput = \"\";\r\n\t\t}\r\n\t}\r\n\r\n\t\/\/ New Data from the A7\r\n\tif (readerSerial.available() &gt; 0) {\r\n\t\tuint chr = readerSerial.read();\r\n\t\tSerial.print((char)chr);\r\n\t}\r\n\r\n}\r\n\r\nvoid resetTimeout() {\r\n\ttimeout = millis() + 2000; \/\/ retry in 2 sec\r\n}\r\n\r\nvoid process(String inp) {\r\n\tif (inp.startsWith(\"$GPRMC\")) {\r\n\t\tSerial.print(\"DATA: \" + inp);\r\n\t} else if (inp.startsWith(\"$GPGGA\")) {\r\n\t\tSerial.print(\"Fix Data: \" + inp);\r\n\t} else if (inp.startsWith(\"$GPGSA\")) {\r\n\t\tSerial.print(\"DOP\/Satellites: \" + inp);\r\n\t} else if (inp.startsWith(\"$GPGSV\")) {\r\n\t\tSerial.println(\"Satellites: \" + inp);\r\n\t} else if (inp.startsWith(\"$GPVTG\")) {\r\n\t\tSerial.print(\"Track\/Speed: \" + inp);\r\n\t} else {\r\n\t\tSerial.println(\"Unknown: \" + inp);\r\n\t}\r\n}\r\n<\/pre>\n<p>Solange der ESP8266 keine Daten empf\u00e4ngt, sendet er alle zwei Sekunden den Befehl zur Aktivierung der GPS-Empfangs. Anschlie\u00dfend werden die empfangenen Informationen f\u00fcr die serielle Schnittstelle in Richtung PC weitergeleitet.<\/p>\n<p>Dies ist nat\u00fcrlich nur der Anfang.<\/p>\n<p>Wer die GPS-Daten auswerten will, sollte sich mal TinyGPS++ anschauen.\u00a0 Im Bereich GSM k\u00f6nnt ihr euch TinyGSM oder Bibliotheken anschauen, die f\u00fcr den A6 entwickelt wurden.<\/p>\n<p>Um das ganze Konstrukt mobil zu bekommen, m\u00fcsste man sich \u00fcber eine Stromversorgung Gedanken machen und eine M\u00f6glichkeit einbauen, den A7 vom ESP8266 aus, via Transistor, einschalten zu k\u00f6nnen.<\/p>\n<p>&nbsp;<\/p>\n<p>Meine Planung l\u00e4uft in Richtung einem Tracker, der zur Bestimmung der Position GPS, GSM-Zellen und WLan-Netze nutzt.<\/p>\n<p>&nbsp;<\/p>\n<p>[Update] Ein paar Tage\/Wochen sp\u00e4ter, meine ersten Erfahrungen:<\/p>\n<p>Bei meinen Test zeigten sich erbliche Probleme mit der Ansteuerung der seriellen Schnittstelle.\u00a0 Der A7 schien immer mal wieder die Baud-Rate zu\u00a0 \u00e4ndern, was zu ziemlich viel Zeichenm\u00fcll f\u00fchrte. Au\u00dferdem fehlten immer mal wieder ganze Teile der Antworten des A7. Besser wurde es, als ich die WLAN-Funktionalit\u00e4t des ESP8266 komplett deaktivierte. Bekannterma\u00dfen wird auf dem ESP8266 sowohl die Programmausf\u00fchrung als auch die WLAN-Steuerung auf dem gleichen Chip ausgef\u00fchrt. Da ich aber mit dem A7 \u00fcber zwei per Software simulierte UART-Verbindung kommuniziere, vermute ich schlicht und einfach Timing-Probleme.<\/p>\n<p>Zwei m\u00f6gliche L\u00f6sung sehe ich gerade: Einmal die zwei durch die Software simulierte UARTs durch Hardware-basierte UARTs zu ersetzen. Hierf\u00fcr w\u00e4re die <a href=\"https:\/\/www.nxp.com\/products\/signal-chain\/bridges\/dual-uart-with-ic-bus-spi-interface-64-bytes-of-transmit-and-receive-fifos-irda-sir-built-in-support:SC16IS752_SC16IS762\">SC16IS752-Familie von NXP<\/a> interessant. Dieses Modul kann \u00fcber i\u00b2c gesprochen werden und verf\u00fcgt \u00fcber zwei echte UARTs. Oder aber macht nutzt den ESP32, der mehrere Hardware UARTs unterst\u00fctzt.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Durch einen Hinweis auf einer anderen Webseite bin ich auf das AI Thinnker A7 Modul gesto\u00dfen. Hierbei handelt es sich um ein GSM und GPS Modul f\u00fcr gerade mal 8\u20ac. In der oben verlinkten Variante mit Adapter-Platine ist das A7-Modul relativ leicht nutzbar. In folgenden Artikel zeige ich, wie man das Modul zusammen mit einem &hellip; <a href=\"https:\/\/www.open4me.de\/index.php\/2017\/09\/ai-thinker-a7-gsm-gps-und-esp8266\/\" class=\"more-link\"><span class=\"screen-reader-text\">AI Thinker A7 (GSM, GPS) und ESP8266<\/span> weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[37,38],"tags":[],"class_list":["post-890","post","type-post","status-publish","format-standard","hentry","category-esp8266","category-nodemcu"],"_links":{"self":[{"href":"https:\/\/www.open4me.de\/index.php\/wp-json\/wp\/v2\/posts\/890","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.open4me.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.open4me.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.open4me.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.open4me.de\/index.php\/wp-json\/wp\/v2\/comments?post=890"}],"version-history":[{"count":9,"href":"https:\/\/www.open4me.de\/index.php\/wp-json\/wp\/v2\/posts\/890\/revisions"}],"predecessor-version":[{"id":926,"href":"https:\/\/www.open4me.de\/index.php\/wp-json\/wp\/v2\/posts\/890\/revisions\/926"}],"wp:attachment":[{"href":"https:\/\/www.open4me.de\/index.php\/wp-json\/wp\/v2\/media?parent=890"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.open4me.de\/index.php\/wp-json\/wp\/v2\/categories?post=890"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.open4me.de\/index.php\/wp-json\/wp\/v2\/tags?post=890"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}