Atom Poor: Atom Fast App (Bluetooth) mit anderem Geigerzähler benutzen

Begonnen von DG0MG, 12. Februar 2021, 20:51

⏪ vorheriges - nächstes ⏩

DG0MG

Zitat von: Henri am 12. Februar 2021, 20:31
Die Software kostet wenig bis gar nichts, oder?

Die App ist kostenfrei. Kann man also auch so mal probieren.

Zitat von: Henri am 12. Februar 2021, 20:31
Ist das Protokoll eigentlich offengelegt, mit dem das Gerät mit dem Telefon kommuniziert? Man könnte dann ja theoretisch beliebige Detektoren zusammen mit der Software verwenden, einfach einen kleinen Arduino mit Bluetooth-Modul dazwischen und fertig...

Das gibts in Ansätzen schon, das Protokoll ist offengelegt.

Siehe: https://translate.google.com/translate?sl=ru&tl=de&u=http://forum.rhbz.org/topic.php?forum%3D80%26topic%3D98

Es gab m.E. auch ein PDF von Madmax, in dem die Kommunikation erklärt ist - das finde ich aber gerade nicht.

edit: Doch gefunden, der Suchbegriff heisst "ATOMSERVICE BLE", das PDF ist in diesem RAR: https://im13.rhbz.org/albums/userpics/10193/AtomServiceBLE4-v_0_2.rar

Der Bauvorschlag von "Syph3r" lässt das Bluetooth-Modul transparent Daten von der seriellen Schnittstelle durchreichen. Dort kann dann also ein Arduino dranhängen, der die Impulse zählt, diese in eine DL umrechnet und per serieller Schnittstelle an das BT-Modul sendet, von dem sie wiederum dann zum Smartphone gefunkt werden, das das logging und die Darstellung in der Karte übernimmt. Wie "Syph3r" schon schreibt: Eleganter wäre es, die gesamte Intelligenz in das BT-Modul zu packen, so dass man nur noch einen Prozessor hat - der Arduino wäre dann obsolet.

Offenbar meldet sich das ATOM FAST beim Smartphone nicht als serielle Schnittstelle, sondern mit einem komplexeren Profil. In den Videos sind ja auch immer die Ticks mit zu hören, vielleicht ist da also auch ein "Mikrofon-Profil" oder so dabei. Deshalb muss wohl eine angepasste Firmware in das Bluetooth-Modul, damit die App glaubt, wirklich mit einem ATOM FAST zu reden.
"Bling!": Irgendjemand Egales hat irgendetwas Egales getan! Schnell hingucken!

Henri

Ach, das ist ja super!!

Ich verstehe leider nicht alles, was mir google da übersetzt, aber immerhin sind ein paar humoristische Spezialitäten dabei - der Link zur Instagram-Seite z.B. wurde mit "Mein Arschloch" beschriftet ;D

Wenn ich richtig verstehe, muss man das BT-Modul noch flashen, was über eine .exe geht, und die braucht Windows. Ich bin ja immer ziemlich vorsichtig, irgendwas aus irgend welchen Foren anzuklicken - na ja. Finde ich toll von Maxim, dass er das alles so offenlegt und den Leuten ermöglicht, ihre eigenen Geräte anzuflanschen.

Viele Grüße!

Henri


--

PS: noch mal ein kleiner Nachtrag: Ich glaube, ich habe jetzt einigermaßen verstanden, wie es geht.

Für den Adapter braucht man ein kleines Bluetooth 4.0 Modul, das einen Prozessor an Bord hat, der auch gleich die Datenverarbeitung übernehmen kann.
Das BT-Modul braucht hierfür natürlich eine modifizierte Firmware. Als Programmer wird ein Arduino verwendet, auf den zuvor ein bestimmter Sketch gespielt werden muss.  Die Firmware liegt als .bin Datei vor und wird über eine .exe auf einem Windowsrechner über den Arduino auf das BT-Modul gespielt.

Hat das BT-Modul seine neue Firmware, kann man von einem Arduino aus seine Messwerte über die serielle Schnittstelle an das Modul schicken, das Modul konvertiert sie dann in das für die App nötige Protokoll.

Ich vermute, dieser Weg wurde gegangen, weil die gängigen BT-Module nur über die serielle Schnittstelle angesprochen werden. Es muss mit der App aber binär geredet werden, und das BT-Modul würde binäre Eingaben als Text interpretieren. Also muss die Konvertierung direkt auf dem Modul erfolgen, wenn man sich frickelige Löterei ersparen möchte (denn die BT-Chips können sicher noch anders Daten annehmen, nur wird das nicht verdrahtet sein).



PS PS: Tja, steht ja auch (fast) alles schon in dem Beitrag direkt hierüber - das kommt davon, wenn beide noch mal nacheditieren und einer ist dann schneller als der andere :)

Henri

Steht da auch, auf was für einem Windows die .exe läuft? Das aktuellste, was ich hier noch habe, ist Win XP auf einem P-III  :D

Ich hätte ja schon Lust, das mal auszuprobieren...

DG0MG

#3
Zitat von: Henri am 12. Februar 2021, 22:49
Ich hätte ja schon Lust, das mal auszuprobieren...

Ja, ich auch.
Deswegen habe ich mir erstmal zwei BLE-Module (Bluetooth Low Energy) AT-09, die zu einem HM-10-Modul kompatibel sein sollen, kommen lassen.
Quelle:

Ich muss die Firma MAKERSHOP übrigens mal ganz uneigennützig loben, die sind superfix, heute morgens bestellt, morgen schon da. Hab da schon mehrmals solches kleines Modulzeugs bestellt, das klappt hervorragend. Das AT-09 scheint ein Clone des HM-10 zu sein, hardwaremäßig ziemlich ähnlich, aber eine andere Software drin. Außerdem ist hier das Modul auf einer Tochterplatine mit weiteren Bauteilen (u.a. einem Spannungsregler 3,3 V) verbaut und in transparenten Schrumpfschlauch verpackt. Wir müssen später an 3 Pins unter dem Schrumpfschlauch.

Dann gibts erstmal reichlich zu lesen, um die Grundfunktion dieser Module zu verstehen, wie man sie ansaftet und wie sie ursprünglich genutzt werden können:


Sie werden also mit 3.3 V oder 5 Volt versorgt (aufpassen) und haben eine serielle Schnittstelle (3,3V-Pegel!), über die man mit dem Modul reden kann. Sinnvollerweise tut man das vom PC aus über einen USB-to-UART-Wandler, z.B. sowas.
Die Dokumente helfen, erstmal eine Grundfunktion lauffähig zu bekommen. Ich kann also jetzt Texteingaben vom PC in die App "BLE Scanner" auf einem alten Smartphone schicken und umgekehrt von einem Eingabefeld in der App in den seriellen Monitor auf dem PC. Letztendlich muss man, wenn man an das Modul "AT" mit 9600,8N1 schickt, ein "OK" zurückbekommen. Dabei ist erstmal noch kein Arduino beteiligt gewesen.
Fallstrick war das serielle Terminalprogramm: Ich hab zuerst PuTTY genommen, da hab ich keine Kommunikation zustande bekommen. Mit dem in der Arduino-IDE integrierten Werkzeug "serieller Monitor" gings. Der UNterschied ist, PuTTY sendet jeden Tastendruck sofort, in der Arduino-IDE schreibt man erst den ganzen Text, gesendet wird erst nach Drücken von ENTER. Den Abschluss der Zeile muss man auf CR/LF (beides) stellen.

Für den Anwendungszweck "ATOM FAST-App" muss also in dieses Modul AT-09 eine andere Software. Das Original-HM10 hat dafür einen AT-Befehl, den sendet man und dann hinterher die neue Firmware. Das geht bei dem Clone leider nicht so einfach, so dass das Flashen etwas aufwendiger wird - man muss also eine Art Programmiergerät bauen - jetzt wirklich mit einem Arduino.

Die CCLoader.exe steuert das Arduino-"Programmiergerät". Wem eine ausführbare Datei aus einem .RAR aus einem russischen Forum nicht sicher genug erscheint, der findet sie auch hier: https://github.com/RedBearLab/CCLoader (unter "Windows"), ebenso den Quelltext, um sie für Linux zu übersetzen.
Die beiden EXEn (die aus dem RAR und die von Github) sind übrigens exakt die gleichen, sie haben denselben MD5-Hash.
"Bling!": Irgendjemand Egales hat irgendetwas Egales getan! Schnell hingucken!

DG0MG

So, nächster Schritt.
Firmware von "Syph3r" (aus dem oben verlinkten Thread im RHBZ.ORG-Forum) flashen.

Das AT-09-Modul und ein Arduino nano werden mit 5 Drähten verbunden, wie in der Skizze gezeigt. Die zeigt zwar einen Uno, aber die Bezeichnungen der Pins sind ja gleich. Dabei kommen 3 Drähte an Anschlüsse des AT-09, die nur auf der kleinen Subplatine liegen und mit Schrumpfschlauch überzogen sind. Man muss also mit einem Skalpell einen Schlitz reinschneiden, oder diesen gleich ganz entfernen.
Die Betriebsspannung und GND sind ja über die Pfosten zugänglich.

Dann den Arduino anschließen und die IDE starten, CCLoader.ino öffnen, compilieren und hochladen.

Wenn das klappt, Arduino-IDE wieder schließen, aber merken, über welche COM-Schnittstelle er angesprochen wird.

Dann eine Kommandozeile öffnen und folgendermaßen aufrufen:

CCLoader.exe 8 ProtonBridge.bin 0

Dabei ist die "8" die COM-Schnittstelle mit dem Arduino.
Der Fortschritt wird angezeigt und nach vllt. 2 Minuten ist die Firmware in dem Modul.
Und danach findet die ATOM SWIFT App auf dem Smartphone tatsächlich ein ATOM FAST!  :o :o

Der nächste Schritt ist, die beiden Platinen wieder umzuverdrahten und den Arduino und das AT-09 mittels UART miteinander zu verbinden. Mit einem Stück passenden Codes im Arduino sollte dann die App auch etwas anderes anzeigen als 0,00.
"Bling!": Irgendjemand Egales hat irgendetwas Egales getan! Schnell hingucken!

Henri

Na, das ist ja mal was! Herzlichen Glückwunsch! :)

Und den Loader gibt es auch für Linux, sagst Du? Tatsächlich, einfach nur eine kleine main.c -  Dann will ich mal hoffen, dass mein AT-09 auch bald mal hier ankommt...

DG0MG

Zitat von: Henri am 21. Februar 2021, 22:23
Und den Loader gibt es auch für Linux, sagst Du? Tatsächlich, einfach nur eine kleine main.c

Evtl. hier mal Nachlesen, da gehts allgemein um das Firmwareflashen: https://forum.arduino.cc/index.php?topic=393655.75

"For those trying to flash using Linux:
1/ compile ccloader ( /CCLoader-master/SourceCode/Linux/main.c from the zip archive):
gcc main.c -o ccloader
2/ run it:
./ccloader /dev/ttyUSB0 CC2541hm10v540_from_hexor.bin 0
"
"Bling!": Irgendjemand Egales hat irgendetwas Egales getan! Schnell hingucken!

Henri

Zitat von: DG0MG am 21. Februar 2021, 22:31
Zitat von: Henri am 21. Februar 2021, 22:23
Und den Loader gibt es auch für Linux, sagst Du? Tatsächlich, einfach nur eine kleine main.c

Evtl. hier mal Nachlesen, da gehts allgemein um das Firmwareflashen: https://forum.arduino.cc/index.php?topic=393655.75

"For those trying to flash using Linux:
1/ compile ccloader ( /CCLoader-master/SourceCode/Linux/main.c from the zip archive):
gcc main.c -o ccloader
2/ run it:
./ccloader /dev/ttyUSB0 CC2541hm10v540_from_hexor.bin 0
"

Ach super, Danke, das wird dann ja ne ganz einfache Nummer! Dann brauche ich nicht mal mehr meinen Uralt Windows Laptop zu reaktivieren...  :yahoo:

DG0MG

"Bling!": Irgendjemand Egales hat irgendetwas Egales getan! Schnell hingucken!

DG0MG

Nächster Schritt:
Arduino nano und AT-09 werden nur noch mit 4 Drähten miteinander verbunden:

Arduino  AT-09
--------------
+5V      Vcc
TxD      RxD
RxD      TxD
GND      GND


Dabei ist zu beachten, dass der RxD-Eingang des AT-09 max. 3.3 V abbekommen darf. Hat man einen (alten?) Arduino, der 5V-Pegel liefert, muss noch ein Spannungsteiler 1k/2k davor. Die Verbindung der Vcc des AT-09 mit +5V gilt auch nur, wenn man die Variante mit Subplatine mit Spannungsregler des AT-09 hat. Ansonsten kann man den 3.3V-Anschluss des Arduino benutzen.

Dann folgendes .ino- File in die IDE kopieren, compilieren und hochladen. Ich hab die Kommentare im Quelltext mal übersetzt, ansonsten ist das wie im RHBZ.ORG-Forum.

//
// credits to Nikita71 from Kiew, Ukraine
// http://forum.rhbz.org/topic.php?forum=80&topic=98
//
unsigned long cps2;                  // Anzahl der Impulse in 2 Sekunden von der Geigersonde
unsigned long RAD;                   // Strahlungspegel
unsigned long DOZA;                  // erhaltene Dosis in µR ohne Vorzeichen
unsigned long toch_milis2;

void setup() {
Serial.begin(115200);
}

void loop() {
  if (millis() - toch_milis2 >= 1000) {
    toch_milis2 = millis();

    RAD = 14;                       // Strahlungspegel in µR
    BluetoothRAD ();                // Sende den Strahlungspegel an das Telefon

    DOZA = 10;                      // erhaltene Dosis in µR
    BluetoothDoza ();               // Senden der Strahlungsdosis an das Telefon

    cps2 = 10;                      // die Anzahl der Impulse in 2 Sekunden von der Geigersonde (für den Messmodus benötigt)
    BluetoothCPS ();                // Sende die Anzahl der Impulse in 2 Sekunden von der Geigersonde zum Telefon
  }
}

void BluetoothRAD (){               // Strahlungsniveau
  double value;
  float value1 = RAD * 0.01;
  value = value1;
  byte * b = (byte *) & value;
  Serial.write(0xA0);               // Schreibbefehl
  Serial.write(0x02);               // 0x02: Dosisleistung in µSv/h
  Serial.write(b,4);                // Serial.write(buf, len)
}

void BluetoothDoza (){              // empfangene Strahlungsdosis
  double value3 ;
  float value4 = DOZA * 0.00001;
  value3 = value4;
  byte * c = (byte *) & value3;
  Serial.write(0xA0);               // Schreibbefehl
  Serial.write(0x01);               // 0x01: Akkumulierte Dosis in mSv
  Serial.write(c,4);                // Serial.write(buf, len)
}

void BluetoothCPS (){               // Anzahl der Impulse von der Geigersonde für 2 Sekunden
  double value5;
  float value6 = cps2 * 0.01 ;
  value5 = value6;
  byte * e = (byte *) & value5;
  Serial.write(0xA0);               // Schreibbefehl
  Serial.write(0x03);               // 0x03: Anzahl der Impulse in den letzten 2 Sekunden
  Serial.write(e,4);                // Serial.write(buf, len)
}


Dieser Sketch misst noch nichts, er dient nur der Demonstration, wie man die als FLOAT-Variablen (4 Byte) vorliegenden Gleitkommazahlen als einzelne Bytes per serieller Schnittstelle zum BLE-Modul schickt. Man muss also einen Schreibbefehl (0xA0), dann die zu beschreibende Variable (z.B. 0x02 für die Dosisleistung in µSv/h) und dann die 4 Byte mit dem Wert senden.

Und schon sieht man die in der Zeile "RAD = 14;" definierten 14 µR/h in der App.
"Bling!": Irgendjemand Egales hat irgendetwas Egales getan! Schnell hingucken!

Henri

Ach, genial!!

Nun bin ich aber wirklich neugierig. Klar, die Arduino IDE gibt's auch für Linux :)

DG0MG

Zwischendrin ein Funkreichweitentest im Freien: Die höchstens erreichbaren 15m sind realistisch, das ist aber auch wirklich das Maximum. Das setzt voraus, dass sich die beiden Geräte (Smartphone und AT-09) sehen. Wenn ich mir das Handy vor die Brust halte und den Rücken zum AT-09 drehe (mein Oberkörper also in der Funkstrecke liegt), dann ist schon viel eher Schluss.
Der Abbruch der Verbindung wird deutlich signalisiert und die Wiederherstellung der Verbindung geht sehr zügig, wenn man wieder drei Schritte in Richtung "Gegenstelle" läuft, das ist schon erstaunlich.
"Bling!": Irgendjemand Egales hat irgendetwas Egales getan! Schnell hingucken!

Henri

Zitat von: DG0MG am 21. Februar 2021, 20:30


Das AT-09-Modul und ein Arduino nano werden mit 5 Drähten verbunden, wie in der Skizze gezeigt. Die zeigt zwar einen Uno, aber die Bezeichnungen der Pins sind ja gleich. Dabei kommen 3 Drähte an Anschlüsse des AT-09, die nur auf der kleinen Subplatine liegen und mit Schrumpfschlauch überzogen sind.



Ich habe gerade gesehen, Du hast versehentlich mit 5V die Firmware geflasht  :o
Stromversorgung war an +5V, und eigentlich müsste man doch auch auf den Signalleitungen noch einen levelshifter nehmen (oder gleich einen 3.3V Arduino Pro Mini nehmen).
Scheint dem Modul aber nicht geschadet zu haben - eine wertvolle Erkenntnis, wenn man den Aufwand gering halten möchte.


Ein Datenblatt zum HT-09 Modul gibt es übrigens hier:

https://acoptex.com/uploads/BLECC41ASpefication.pdf

Da sieht man auch schön, dass die zum Flashen der Firmware verwendeten Pins  GND, 3.3V, RESET, DEBUG_DATA und DEBUG_CLK sind.

RESET geht an Arduino D4, DATA an D6, und CLK an D5.

DG0MG

Ah, verflixt.
Ich war davon ausgegangen, dass der Arduino überhaupt mit 3.3V betrieben wird, wozu sollte es sonst einen Spannungsregler und einen mit "3V3" beschrifteten Anschluss geben?
Aber das ist ein Denkfehler, haste recht. Ich hab nur über die Betriebsspannung für das Modul nachgedacht. Der HIGH-Pegel am jetzigen TxD-Ausgang des Arduino liegt bei 4.5 V, das hält der Chip offenbar ja auch aus.

Ah, in der Spezifikation steht:

Operating Voltage 3.3V
Recommended operating conditions: 2.2-4.2 V
Absolute Maximum Rating: 5.6 V

und eigentlich problematisch: "other Terminal Voltages Vdd+0,4 V". Das ist sicher überschritten, wenn Vdd 3,3V sind.
"Bling!": Irgendjemand Egales hat irgendetwas Egales getan! Schnell hingucken!

Henri

Zitat von: DG0MG am 22. Februar 2021, 17:52

und eigentlich problematisch: "other Terminal Voltages Vdd+0,4 V". Das ist sicher überschritten, wenn Vdd 3,3V sind.

Ah! Dann war es sogar gut, dass Du ihn an VDD 5V angeschlossen hast. Bei 3.3V hätte es ihn wahrscheinlich zerlegt...

Wenn man den Spannungsregler und die Verpolungsschutzdiode auf dem HT-09 überbrückt, fällt ja die Dropout-Spannung weg, und dann kann man ihn direkt an einem 3.3V Pro Mini betreiben. Allerdings wird dann das Programmieren schwierig, weil ja beides über die selbe RX/TX läuft. Software Serial ist wahrscheinlich nicht zuverlässig genug - also am besten wohl einen Jumper in die Versorgungsspannung des HT, oder so...