In jedem Zimmer im Haus, soll folgende Einheit verbaut werden:
Display OLED 128x64 zu Kontrolle LINK ----OK
BME280 für Temperatur und Luftdruck LINK ----OK
Bewegungsmelder LINK ----OK
Luftgütesensor MQ2 ?????
Oberflächentemperatur Sensor (soll die Oberflächentemperatur des Fußboden erfassen) LINK ----OK (erfasst in 3m Höhe die Temperatur der gesamten Oberfläche)
Lichtsensor LINK ----OK
Temperaturfüller direkt in der Betondecke ----OK
Summer für Rückmeldung / Alarm (Optional)
LED für Rückmeldung (Bewegungsmelder) ----OK (Bewegungsmelder)
LED für Rückmeldung (Gegenstelle / Master) (kurze Impulse)
Die Werte sollen im Display alle x Sekunden nacheinander angezeigt werden.
Zudem sollen die Werte per LAN (kein WLan) zur einer PFC200 Codesys 3.5 SPS gesendet werden, evtl. per Modbus oder MTTQ. Dafür möchte ich einen ENC28J60 verwenden.
du stellst keine einzige Frage. Daher: ja super! Hopp auf.
Ein Tipp: nimm nicht den ENC28J60 sondern ein Shield mit einem W5100 oder einem W5500. Es gibt auch Boards da kann man direkt den Nano draufstecken (oder drunterstecken, weil die Pins lang genug sind) hier zum Beispiel auf Aliexpress
oder auf Amazon genauso
Da Du später noch mehr machen willst, solltest Du Dich gleich von Anfang an von Delay verabschieden, da der Prozessor in dieser Zeit (fast) nichts tut, also die Zeit nutzlos vertrödelt.
Schaue Dir dazu BlinkWithoutDelay in den Beispielen Deiner IDE an und verstehe es. Dabei kann Dir die Nachtwächtererklärung helfen.
hd458:
Was ist besser dran? Den ENC28J60 habe ich noch.
Stark vereinfacht, den ENC muss der Nano verwalten, dann läuft der ganze TCP/IP Stack im Nano. Der W5100 bringt das alles schon mit und der Nano muss weniger tun.
Zum Code: #define SEALEVELPRESSURE_HPA (1013.25) //BME280
würde ich nicht als define machen sondern ganz normal
const float sealevelpressureHpa = 1013.25; // obs ein float sein muss bezweifle ich sowieso
Mir erschließt sich nicht, warum du einerseits deine Variablen global definierst:
dann aber einen Aufstand machst mit Refernzen/Pointer um auf diese zuzugreifen.
Außerdem hast jetzt eine Monster Funktion in der du alles reinpackst (Sensor auslesen und Ausgabe), das hättest in der loop auch machen können. Teile das in vernünftige Einheiten auf.
delay ist langfristig böse
Leerzeilen wo es keine braucht.
Drück mal STRG-T und lass die IDE den Code formatieren.
hd458:
Was ist besser dran? Den ENC28J60 habe ich noch.
Das Wieso wurde bereits gesagt.
Für den W5100 bzw W5500 gibt es Module mit PoE. So kannst Du den Arduino direkt über Netzwerkkabel versorgen und brauchst keine zusätzlichen Kabel bzw eine Stromversorgung im Zimmer.
Grüße Uwe
Hallo,
noch mal zurück zu Deinem Hardware Konzept.
Display und BME laufen mit IC2 Bus. Der ist eigendlich nur für kurze Strecken. Das wird nicht für mehrere Zimmer gehen. Mal abgesehen davon das sich da meist nur 2-4 Adressen je Typ einstellen lassen.
Du wirst also schon für jeden Raum einen eigene UP vorsehen müssen.
Nano und ENC28J60: TCP-Stack, PubSubClient für MQTT und Lib für den BME280 hatte ich mal in Betrieb.
Ist absolute Obergrenze, da ist der Ram-Verbrauch am Ende.
Der Rest ist ein Abwägen der Kosten wenn man mehrere Einheiten bauen will.
Da WLAN raus ist, fällt zumindest meine Lieblingsversion mit einem ESP8266 (D1 mini) schon mal weg.
Hier tummeln sich 10...15 ESPs im WLAN ohne irgendwelche Probleme.
Mein Bauchgefühl sagt: Das passt nicht Alles auf einen Nano.
Kämpfe hier gerade mit einem Uno (gleicher µC) - allerdings habe ich 'ein paar' globale Variablen, Die etwas Speicher verbraten.
Da das oLED mit Seinem Puffer auch nicht gerade geizig damit umgeht, befürchte ich, daß das Alles an den Speichergrenzen des Nano/Uno scheitert.
Danke für den Link - Das könnte mir schon gefallen - muß schauen, ob ich Das nicht um ein PLOT/PSET (einzelnen Pixel setzen) erweitert bekomme ... so ein SSD1306 ist ja auch nur ein Mensch und will nur freundlich angeschwätzt werden
(ich hätte gerne eine Temperatur-Kurve auf dem Display ... Extrawurst und so)
amithlon:
Da WLAN raus ist, fällt zumindest meine Lieblingsversion mit einem ESP8266 (D1 mini) schon mal weg.
Hier tummeln sich 10...15 ESPs im WLAN ohne irgendwelche Probleme.
Das ist in meinen Augen auch die beste und effektivste Lösung. Ich war auch mal Fan von "Leitung ist Leitung".
Dann lernte ich den Wemos D1 mini kennen ...
Der letzte Punkt liegt eher an Dir, als am gewählten Protokoll - Welches Dir wohl keinen Speicherplatz sparen wird.
Einzig, wenn Du überall das gleiche Protokoll benutzt - dann muß natürlich nur Eines davon auch im Code abgefrühstückt werden.
Bei mir werden an Nano's (und mindestens zwei Uno) DS18B20 ausgelesen und per CAN (Kabel wurde beim 'Neu-machen' dafür vorgesehen) verschickt.
Neben mehreren Versionen der Nachrichten (von den DS18B20 schwirren hier zwei Typen an Nachrichten rum, eine Alte und eine Aktuelle), gibt's noch BME280 und einen US-Sensor, Dessen Abstand ich so erfahre.
Aktuell möchte ich die Daten loggen (Datenlogger-Shield AZDelivery in meinem Fall) UND als Kurve auf einem Display ausgeben - Letzteres beißt sich akut mit dem Logger-Shield auf einem Uno (neben dem Kram, Den ich eh für die CAN-Nachrichten brauche) - Das wird wohl ein Mega übernehmen dürfen.
Alleine ohne das oLED (dafür mit einem 2004 LCD) werden mir Laufzeitprobleme vorausgesagt
Globale Variablen verwenden 1643 Bytes (80%) des dynamischen Speichers, 405 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.
Wenig Arbeitsspeicher verfügbar, es können Stabilitätsprobleme auftreten.