Bienenwaage im Eigenbau

Hallo, ich bin der Julian. Ich bin seit letztem Jahr Imker und will mir nun meine eigene Stockwaage bauen. Der PI ist mit Python schon fast fertig (Danke an @mhies ). Habe zwar noch einen Bug drin, werde ihn aber denke die nächsten Tage ausbügeln können. Nun da ich über @mhies auf dieses Projekt gestoßen bin, war ich echt begeistert über die Darstellung. Da war klar, sowas will ich auch haben:-) Ich denke, ich werde nächste Zeit eventuell noch fragen zur Auswahl haben, denke aber, dass ich hier gut aufgehoben sein werde.

Viele Grüße
Julian

P.S. die Daten, die hier gesamelt werden, teile ich natürlich gerne mit allen^^

Na, wenn Du meinst - willkommen! 8)

Das entscheidest Du selber - Du kannst das ja komplett auch selbst hosten, wie z.B. @Thias es macht.

Gruß,
Martin

Lieber Julian,

herzlich willkommen von uns allen. Wir freuen uns, Dich hier begrüßen zu dürfen und schicken Dir demnächst individuelle Identifizierer und Zugangsdaten für den MQTT Broker und fürs Grafana. Für weitere Fragen und Anregungen stehen wir Dir jederzeit zur Verfügung.

Viele Grüße,
Andreas.

1 Like

Hey zusammen,
entgegen des ersten Posts habe ich mich für einen Arduino entschieden. Ein erstes funktionierendes System ist da, nur leider noch nicht soweit, dass es wirklich gut funktioniert. Ich habe aktuell leider starke Speicherplatzprobleme. Ich kann es zwar Kompelieren, doch ist der Speicher des Atmega 328 immer am Maximum. Vllt können sich ja mal ein paar Personen den Code anschauen und mir Tipps geben, wie ich den Code schlanker bekommen kann…

Grüße
Julian

Link nach Github

Schön, daß Du drangeblieben bist, und Glückwunsch zur erfolgreichen Datenübertragung hin zum influxdb + grafana per mqtt über GSM!

Aber bevor ich weiterschaue:

… da finde ich credentials, also acc und pw… Deine Entscheidung; spätestens jetzt im Original ändern! ;)

Zu dem Platzbedarf Deines Programms:

  • Deine drei Sendetopics haben ihre Basis hiveeyes/kasper/Garten/Stand1/data/ gemeinsam, das sind 36 byte * 3 = 108 byte. 72 davon kannst Du einsparen, wenn Du diese base nur einmal definierst, alle drei Einzeltopics in deren Definition bs auf ihren Namen kürzt und später dann als z.B. topicbase + topic.. referenzierst.

  • Wenn Du diese Konstanten so anlegst, liegen die nicht nur im Flash (32k), sondern werden ins RAM kopiert, wovon der 328p nur 2k hat. Der AVR hat eine Besonderheit, die es erlaubt, entgegen dieser Art CPU-Architektur derlei Konstanten im Flash abzulegen und zur Laufzeit ohne Umkopieren direkt auszugeben zu können; der avr-gcc nutzt das seit geraumer Zeit. Hierzu müssen diese Konstanten als char arrays im PROGMEM angelegt werden. Wie das geht, steht z.B. bei Arduino.cc, oder adafruit, oder zur Vertiefung bei Nick Gammon. - Damit kannst Du also auch noch die topic-base aus dem SRAM verbannen und statisch weitere 36 byte RAM gewinnen. Gleiches gilt für serial.print und Kollegen : wenn die nur immediate-Konstanten ausgeben, können die es auch aus dem progmem und damit wieder RAM sparen. Echte ROM-Konstanten eben! ;)

Wenn diese Konstanten mehr als nur ausgegeben werden, haben sie natürlich ihren dynamischen RAM-Verbrauch gemäß ihrer Größe, insofern ist allein mit solchen Methoden wie oben nicht sichergestellt, daß der AVR nicht doch noch wg. dynamischem RAM-Bedarfs hängt.

Um sowas besser im Auge zu haben:

size_t freeRam ()
{
return RAMEND - size_t (__malloc_heap_start);
} // end of freeRam

Also z.B.:

Serial.print (F("Free memory = "));
Serial.println (freeRam ());

(snippets: Nick Gammon, siehe oben)

Hallo Julian, bei den Serial.print-statements mit konstantem Text kannst du die (F(…)-Version verwenden, siehe Serial.print(F(“Hello World”))

also z.B. statt
Serial.print("Message arrived [");
das hier:
Serial.print(F("Message arrived ["));

Weiter finde ich es cool, dass du die komplette Funktionalität in gut 150 Zeilen gepackt hast. Meine Version hat da fast noch eine 0 bei der Zeilenlänge dran. ;-) Hat aber auch ein paar Optionen wie ESP8266, HX711 vs. ADS1234, RTC, … und kann noch kein MQTT :-/

Noch ein Hinweis zu

Ich weiß nicht, wie du deinen Node momentan betreibst, wenn der irgendwann mit Batterie laufen soll, dann breche den loop nach x Fehlversuchen ab, sonst läuft der immer in der Schleife und braucht Strom, hat aber nach 2 Stunden immer noch keine connection, aber eine leere Batterie.

Wenn “nur” der Speicher das Problem ist, dann könnte auch ein ESP8266 eine sehr, sehr günstige Lösung sein bei der du noch WLAN dazu bekommst, z.B. zur Konfiguration / Justierung der Waage, oder zum setzen das AP, wenn die SIM mal nicht von der Telekom ist. - Oder natürlich ein “größerer” Arduino.

P.S.: Fotos vom System gerne auch hier posten!

Erst einmal vielen Dank für das Feedback.

Dies habe ich schon einmal versucht, doch leider wollte das danach nicht mehr klappen. Dort werde ich nun nochmal angreifen.

Da werde ich mich mal einlesen und Versuche mit machen.

Die aktuell verwendeten Serial.prints sind aktuell nur zur Fehlersuche da. Da ich immer wieder Probleme hatte, wurden die genutzt, wo es denn im Code gerade hängt. Ich habe eine Variante getestet komplett ohne Serials. Diese war dann aber sehr geringer Unterschied zu vorher. Ich werde, so wie die anderen Sachen dies auch einmal in den Flash zu schieben. Ich werde Feedback geben^^

Grüße Julian

Hallo zusammen,
Ich habe mich heute nochmal daran gemacht.

Dies hat zwar etwas gebracht, doch ist mir aufgefallen, dass nun die 32k auch zu 80% ausgeschöpft sind. Da in dem Code aber noch nicht alles dabei ist, was ich haben möchte, kann ich hier leider so nicht weiter machen. Des weiteren habe ich mit strcat(top,topic2) also top der Teil, der immer gleich ist, und dann mit topic 1,2,3 die unterschiedlichen Topics selber leider immer nur noch den ersten Topic versenden können. Warum nun die anderen nicht mehr gehen, habe ich leider noch nicht herausfinden können.

Ich werde mich nun mal in einlesen, wie ich die daten anders hier einfügen kann, da scheinbar die Libs doch sehr viel speicher brauchen…

Danke noch an @weef und @clemens.

Welchen Arduino verwendest du denn gerade? Den “normalen” Uno? Ich denke mit der Optimierung des Codes ist das nur Symptomherumdoktorei. Entweder man muss an die Libs selbst - was ich persönlich z.B. gar nicht könnte - um den Speicher weniger zu belegen. Oder man verwendet andere Hardware.

Wäre es nicht das einfachste einen etwas größeren Microcontroller zu nehmen. Der ESP32 oder ESP8266 ist supergünstig könnte aber nicht mit allen Libs funktionieren. Auf der anderen Seite sind da viele tausend Leute dran alles mögliche zu portieren und optimieren, dass die Sachen am Ende auch mit dem Arduino Core des ESP laufen. Ich würde mir mal einen günstigen ESP32 schnappen und schauen, ob das möglich ist. Im Herbst war der HX711 noch ein Problem aber ich habe in der Zwischenzeit schon von einigen Waage-Projekten mit dem ESP32 und HX711 gehört, so dass ich davon ausgehe, dass mit aktuellem core und latest and greatest libraries der laufen sollte.

Oder du nimmst einen “großen” klassischen Arduino oder gleich einen mit Cortex M0 um die digitale Sound-Schnittstelle zu nutzen, falls du später auch Audioanalysen über I2S mit der Arduino Sound-Bibliothek machen möchtest.

ich versuche mal alles auf einen Mega umzubauen…denn das ist scheinbar mit der Sim wie ich gerade feststelle nicht so einfach

Mega was? Einen ATMega hast Du ja schon verwendet - jetzt also einen Arduino Mega mit ATMega2560 ?

jap genau. 2560 teste ich jetzt. doch jetzt will die Kommunikation mit dem SIM Modul nicht mehr

Der Arduino Mega ist für das SIM800-Modul nicht schlecht, der hat nämlich nicht nur eine Serielle Schnittstelle, sondern 4 davon. Du kannst damit auf die wacklige software-emulierte soft serial verzichten und gleich die hardwareseitige verwenden, wenn das die TinyGSM unterstützt.

Bei Problemen mit dem GSM-board ist häufig die Stromversorgung das Problem. Die vom Arduino bereitgestellten 5V reichen normalerweise nicht.

Ihr habt mich ermutigt, doch noch nicht aufzugeben. Ich habe alles soweit mit dem Mega am laufen gehabt. Leider war der Code aber so aufgebaut, dass ich ihn nie schlafen legen konnte und somit extrem viel Strom verbraucht würde.

Nun ja, ich versuche nun schon seit 2 tagen diesen Sch…Fehler zu finden, warum er nun nicht mehr ans Backend senden möchte…Also ich komme mit dem Code noch nichtmals dahin… Kann dort mal einer von euch drüber schauen?

Also hier der Code:
Github

SerialMonitor

Hier einmal der Code:

Also es hängt i-wo bei Zeile 311-315 im Originalcode.
315 schreibt er noch in den Seriellen Monitor, doch danach macht er nichts mehr…Ich glaube, ich sehe den Wald vor lauter Bäumen nicht mehr^^

Grüße
Julian

Hi Julian,

kannst Du das Verbinden mit dem MQTT mal so gestalten, wir hier im Beispiel zu sehen:

Der Aufruf von mqtt.loop() z.B. findet sich bei Dir im Quelltext an keiner Stelle. Vielleicht wäre es sinnvoll, erst einmal dieses Beispiel 1:1 zum Laufen zu bringen und sich dann von dort aus vorzutasten und die Sensorik einzubauen.

Bitte arbeite bei den ersten Gehversuchen auch erst einmal ohne Einschlafzyklen, also ohne SleepNow().

Viele Grüße,
Andreas.

Ich hallo Andreas,
Ich habe ja ein funktionsfähiges Script. Das läuft ohne die mqtt.loop(). Wenn ich es richtig verstanden habe, ist das nur dafür da, wenn mit dem Arduino Daten empfangen werden sollen, dass er die Verbindung aufrecht erhält. Sonst konnte ich noch nicht herausfinden, für was das gut seinen sollte. siehe Hier

Da ich ja aber den Arduino schlafen legen muss, zwecks Energie, muss ich dass alles umbauen und die Verbindung nicht in der Setup aufbauen, sondern in der Loop. Und da hapert es aktuell… vllt findet ja jemand den oben beschriebenen Fehler…

Grüße
Julian