Low Cost GSM/GPRS-(SIM800)-Node

Nachdem wir das Thema vor langem schon mal in der Mailingliste (nicht abschließen) diskutiert haben, möchte ich es auch hier im Forum nochmal anstoßen:

GSM/GPRS ist jenseits von WLAN und LoRa immer noch ein Standard, der es schafft Daten von Standorten zu schicken, die von der Infrastruktur eher “vergessen” sind. Daher ist das immer noch ein Übertragungsweg der für die Masse der Imker interessant ist.

Sehr viele Arduino-GSM-shields verwenden die SIM800 Hardware-Version leider häufig in einer 5V-board-Version und nicht unbedingt auf Stromsparen optimiert.

Besser für unsere Zwecke ist das GPRSBee von SODAQ. Dies hat allerdings den etwas unüblichen bee socket als physikalische Schnittstelle und ist mit 35 EUR immer noch teuer.

Deutlich günstiger sind breakouts, wie dieses hier: http://www.ebay.com/itm/1PCS-Smallest-SIM800L-GPRS-GSM-Module-Card-Board-Quad-band-Onboard-Antenna-/172118758210 das schon für um die 5 EUR zu haben ist.

Leider können wir die Module nicht 1:1 an einen Arduino anschließen.

  • die Dinger brauchen viel Strom - peak 2 A wird häufig genannt.
  • wenn sie immer an Strom hängen verbrauchen sie den auch, wir müssen die also zwischendurch abschalten
  • die pins sind nicht 3.3.V tolerant

Gerne würde ich diskutieren wie man die Dinger gut und für längere Zeit an einen 3,3 V-Arduino anschließen kann.

Zum Thema abschalten habe ich vor langem schon mal diesen Thread gestartet:

Mir ist noch nicht klar, welche Pins nun 3,3 V tolerant sind und welche nicht. Was bieten sich hier für einfache und günstige Lösungen an?

A post was split to a new topic: ULPnode

Eine Lösung könnte hier die von SODAQs GPRSBee sein, siehe den Schaltplan des GPRSBees Abschnitt: “Level Converter”: auch die Pin-Belegung ist manchmal hilfreich.

Da schaut es so aus, also ob nur TX und RX nicht tolerant für 3,3 V sind. DTR und CTS werden jedenfalls nicht “converted”. Als Level Converter wird ein 74LVC1G125DCK von TI (das richtige datasheet?) verwendet.

Hilfreich zum Thema Level-Anpassung allgemein ist 3.3v logic levels interface with standard TTL/CMOS logic - How to do it... - Arduino Due - Arduino Forum

Nein - alle pins der Seriellen des Modems (Namen in Knauff’s SIM800H-Symbol im Schaltbild: RXD, TXD, RTS, CTS, UART_DCD , UART_RI, UART_DCD) halten maximal 2,8V aus; siehe Tabelle 9 auf Seite 30 von sim800h_hardware_design_v1.00.pdf :

Hm. Ja, nur - diejenigen des Modems werden aber auch gar nicht verwendet in der GPRSBee v6, also gibt es auch keinen Grund, diese Leitungen auch noch über level shifter zu schicken. Du meinst sicher die namensähnlichen Pins am Bee header U2 (!DTR/IO und !CTS/IO). Oder? ;)

Diese beiden Leitungen brauchen keine Pegelwandlung, weil

  • !DTR/IO den load switch aus T1/Q1 für VBATT sowie mittels T3 PWRKEY schaltet, also muß !DTR/IO lediglich die Basis von zwei BJT treiben, und
  • !CTS/IO hängt am STATUS-Ausgang des Modems, der mit VOHmin=2.7V ohne Hilfe einen 3.3V-Logik-Eingang auf H treiben kann.

Ja, stimmt, ich meinte DTR und CTS am GPRSBee-Modul, war mir nicht ganz bewußt, dass das SIM800-Modul die ähnlich bezeichneten pins hat, die aber beim GPRSBee-Modul anders “generiert” / nicht verwendet werden.

Bin bisher immer von der GPRSBee-Lib ausgegangen, da sind DTR und CTS obligatorisch. DTR schaltet das Modem an (bei der SIM900-Version war es noch ein toggle switch, d.h. wenn es an war schaltete DTR aus, wenn es aus war wurde es mit DTR angeschaltet). Mit CTS wird der an/aus-Status signalisiert. Ich sehe aber gerade auf der beelogger-Seite zum SIM800-Modul, dass die beiden pins nicht zwingend nötig sind. Anscheinend ist mit einer vorhandenen (bzw. geschalteten) Stromversorgung das SIM800 automatisch “on”, d.h. wir könnten auch auf diese beiden pins / Funktionen verzichten, weil wir eine geschaltete Vcc haben/brauchen! Dann wäre allerdings die SODAQ GPRSBee Lib anzupassen, bzw. wir switchen auf die von dir empfohlene lib TinyGSM mit direkter MQTT-Unterstützung.

Bei der Teileliste vom Beelogger GSM-Shield sind übrignes zwei Widerstände angegeben deren Verbauung (noch) nicht dokumentiert ist - ich habe da mal angefragt, ich nehme aber an, dass es ein voltage divider für den RX-Pin des SIM800 ist. Dachte eigentlich dass ein widerstands-basierter Spannungsteiler für so schnelle Schaltvorgänge wie bei einem Modem nicht der Königsweg ist, aber es scheint wohl zu funktionieren.

Auch im Datenblatt zum SIM800-Modul http://simcom.ee/documents/SIM800/SIM800_Hardware%20Design_V1.08.pdf werden auf Seite 30 (auch Seite 30 wie bei deiner Referenz, gerade nur die v1.08 gefunden) als Referenz-Design für den Seriellen Anschluss bei einem 3,3 V MC auch ordinäre voltage divider mit 1k und 5k6 empfohlen. Kann also nicht sooo schlecht sein.

TX level shiften die gar nicht. Warum ist das beim GPRSBee-Modul so “kompliziert” gelöst, oder verträgt das ggf. auch 5V über die Serielle?

Interessanterweise empfiehlt Felix Rusu ein voltage divider für den Anschluss eines RFMxx an einen “richtigen” 5V Arduino (Uno) (3,3 V vs. 5 V) und ich habe das auch so bei meinen Open Hive shields für den Arduino Yun gemacht und die laufen auch ganz gut.

Für mich würde das jetzt bedeuten, dass wir TX direkt anschließen, RX mit einem voltage divider, auf DTR und CTS verzichten können und die Versorgungsspannung direkt vom Lipo über einen Transistor / Mosfet wie beim Beelogger schalten oder eben einen P-channel als direkten high-side switch verwenden, wenn der im Leerlauf nicht zu viel braucht.

Guter Plan, oder passt da was nicht? ;-)

A post was merged into an existing topic: Sim800

Die dort empfohlenen P-channel MOSFETs hatte ich damals nicht bei Segor im Laden bekommen, als Alternative wurde mit der IRLML6401 empfohlen. Not tested yet. ;-)

Ich habe zuerst versucht die Spannung per MOSFET mit einem high side switch zu schalten, analog zu diesem Schaltbild von NIck Gammon

Das Problem ist aber

which means that we have to output 5V (HIGH) from the Arduino to turn the MOSFET off.

Der “angeschaltete” pin braucht nämlich Strom und zwar genau in der Zeit wenn das ganze System eigentlich schlafen soll. Das ist für ein “low power” oder gar “ultra low power” System im sleep mode zu viel - ich habe es gemessen und es war jenseits dessen was der Seeeduino braucht, die Zahl habe ich gerade nicht auf dem Schirm, war schon etwas her.

D.h. wir brauchen doch einen Transistor, der uns das Leben etwas erleichter und auch dazu liefert uns NIck eine Schaltung:

… und wir können hier mit LOW ausschalten:

To turn the MOSFET off, we output a LOW signal from the Arduino, thus Q1 does not conduct, and therefore the 1k resistor (R2) pulls the Gate to 12V.

Ich habe es noch nicht aufgebaut und durchgemessen, hoffe aber das funktioniert so - auch in unserem 3,7/3,3 V-System

…macht Onkel Sodaq auch so! B)

Detail der GPRSBee:

image

1 Like

Danke für diese Anregung!

Nachdem jetzt im Verein doch öfter mal Anfragen bzgl. einer Bienenwaage kamen, und die Anforderung “Low Cost”, “Low Power” und geringe Komplexität, im Vordergrund standen, hab ich mich mal an o.g. Aufbau versucht. D.h. ganz simpel ein Pro Mini, SIM800L, H711 und Sensoren. Die Sensoren und die SIM800L werden mit einem P-Ch Mosfet, wie oben dargestellt, geschaltet. Vorgeschaltet ein Transistor, so dass bei PIN High der Strom durchgeschaltet wird. Den Stromverbrauch konnte ich durch Auslöten der LED und des Reglers und mit der LowPower Lib sehr runterdrücken. Eine RTC ist nicht drin, das Messintervall erfolgt über die 8s LowPower Schleife.
Das System steht jetzt seit 1 Monat bei mir im Wohnzimmer und funktioniert bislang zuverlässig.

4 Likes

Das hört sich gut an @Johannes! Magst du ein paar Fotos hier posten? Wie hast du das aufgebaut, auf 'nem breadboard oder schon eine Platine? Und mit welcher Software fährst du das? Auf welchen deep sleep Verbrauch kommst du? Sorry für die vielen Fragen! ;-)

Der letzte Post ist zwar schon etwas her, mich würde Deine Lösung aber dennoch interessieren. Hast Du Bilder oder der Gleichen?

Hallo Hermann,
sorry @clemens , habe Deinen Post erst heute wahrgenommen.
Unten das Layout der Platine. Funktioniert bislang zuverlässig und ist in 3-facher Ausführung am Bienenstock im Einsatz. Wenn ihr noch weitere Details wissen wollt, einfach posten. Stromverbrauch habe ich jetzt nicht mehr im Kopf, war nicht ganz so niedrig wie hier beschrieben, aber schon grob in der Richtung. Also Solarpanel hab ein 0,5 W Modul im Einsatz und einen 1200mAh Lipo. Software hab ich selbst ganz rudimentär mit den Libs geschrieben. Nichts besonderes. Messen, hochladen, schlafen,…

2 Likes

@Johannes ich kämpfe mit dem Abschakten des sim800 Moduls. Kannst du mir bitte sagen welchen mosfet du genau genutzt hast? Die dienlich nutze scheinen nicht passend zu sein, das Ding rebooted ständig.
Wäre dir auch dankbar wann du von deiner Platine beide Seiten posten würdest - will nämlich genau so etwas auch aufbauen.

Danke
Christopher

Welchen Typ benutzt Du genau? Laut Beschriftung der Platine ein P-Kanal MOSFET. Gate, Drain und Source könntest Du auch noch prüfen.

Edit: natürlich P-Kanal… wer lesen (und schreiben) kann ist klar im Vorteil. Sorry.

Um die positive Stromversorgung zu schalten, benotigt man einen P-Kanal MOSFET, wie auch oben im Schaltplan angegeben.

1 Like

MOSFET P-CH 20V 24 NDP6020P TO-220-3

Der ist korrekt. Exakt den selben benutze ich auch.
Schaltet der durch wenn Du das Gate auf Masse ziehst?

Ja er schaltet durch aber irgendwie zieht der sim800 zu viel und er läuft nicht stabil. Er startet und blinkt und wenn ich den ein reset mache geht er in die knie und ist tot, manchmal startet er auch neu.
Vermute es liegt daran dass er zu viel zieht und der MOSFET das nicht ab kann. Aber keine Ahnung bin da wirklich ein Laie.
Any ideas?

Kann leider nicht mehr als drei Posts absetzen, daher hier noch mal eine Beschreibung:
Also ich habe einen 3,7V 18650 Lipo.
Ich habe daran einen WEMOS D1 Mini
Ich schalte über einen Pin einen BC547C und darüber den MOSFET.

Wenn ich die Spannung am SIM800 messe schaltet der MOSFET und die Spannung kommt am SIM800 an.
Er beginnt auch zu blinken aber nach geraumer Zeit schaltet er sich gefühlt aus oder restartet.
Im Moment ist die Spannung des Akkus etwas niedrig, vielleicht liegt es daran - ich lade den Akku mal über Nacht und probiere es morgen noch mal. Werde berichten ob es daran lag,
Übrigens habe ich noch einen Widerstand am MOSFET von 4,7K zwischen Source und Gate und einen vor dem BC Gate von 4.7K.

Öh - der MOSFET kann 24A kontinuierlich. Falls Du das überschritten hättest, wäre der Rest schon längst geschmolzen.
Wie kommst Du darauf, das der SIM800 zu viel zieht? Wie versorgst Du denn Deine Schaltung?

1 Like