AZ-ENVY im Test
Ziel
Unter meinem Mobilheim möchte ich Feuchtigkeit und evt. auch die Temperatur, die allerdings auf dem AZ-Envy durch die Nähe zum Gassensor verfälscht wird, kontinuierlich messen. Der Temperaturwert ist nur als Anhaltspunkt nutzbar. Daher werde ich noch mal schauen, ob über die Watchdogfunktion die Verfälschung reduziert werden kann, denn ich brauche nur ab und an Werte. Die Daten sollen *mit MQTT * an den MQTT-Server übermittelt werden und mit einem Groovy-Programm zusammen mit anderen Sensordaten in der Datenbank gespeichert werden.
Vorgehensweise
Der AZ-Envy wird über die ARDUINO-IDE programmiert. Als Libraries verwende ich Wire,SHTSensor,PubSubClient und ESP8266WiFi. Wichtig ist den ESP8266 in die Voreinstellungen unter zusätzliche Bordverwalter-URLs mit http://arduino.esp8266.com/stable/packageesp8266comindex.json hinzufügen. Falls nötig von anderen URLS mit Komma trennen. Als Board sollte man dann den AZ-ENVY als ESP8266-Generic eintragen.Dazu verzweigt man im Menue unter Tools auf Boards und klickt die ESP8266... an und in der Liste erscheint das generische Bord und wird ausgewählt. Hat man das Quellprogramm eingefügt und die entsprechenden Libraries hinzugefügt, geht es ans Eingemachte: Seriell-Adapter benötigt, da der AZ-Mini, das nicht an Board hat. Bei AZ wird der FT232-AZ angeboten, der diese Aufgabe übernehmen kann. Er wird wie auf den Fotos dokumentiert angeschlossen.
und

Die Pins RX,TX und Ground müssen verbunden werden. Sowohl der FT232 wie der AZ-Envy-USB-Anschluß müssen aktiv angeschlossen sein. Der AZ-Envy kann über eine USB-Steckdose angeschlossen werden, da hier nur der Strom gebraucht wird. Der FT232 natürlich an das Programmierdevice, also PC, Raspberry-Pi oder was auch immer. Die Arduino-IDE lädt nach dem Compilieren den Code auf den AZ-Mini über den FT232. Um den AZ-Mini in den Flashmodus zu versetzen, drücke ich schon beim Compiliervorgang den Reset- und Flashbutton auf dem AZ-Min gleichzeitig. Sobald i der IDE im Consolfenster Connecting... erscheint lasse ich den Reset-Button los. Den Flashbutton drück ich noch weiter, bis die Meldung Writing at mit Prozentangabe erscheint. Es mag auch anders gehen. So funktioniert es für mich reibungslos.
Hier noch mein Quellcode:
```
include
include "SHTSensor.h"
include
include
`
`
SHTSensor sht1(SHTSensor::SHT3X);
const char* SSID = "frixie";
const char* PSK = "Hestdatdacht";
const char* MQTT_BROKER = "192.168.1.109";
float temperature, humidity, pressure, altitude;
char *node_id = "<5678>";
WiFiClient espClient;
PubSubClient client(espClient);
void setup_wifi() {
Wire.begin();
WiFi.begin(SSID, PSK);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
}
Serial.println(WiFi.localIP());
}
void setup() {
Serial.begin(9600);
setup_wifi();
client.setServer(MQTT_BROKER, 1883);
sht1.init();
}
void loop() {
if (!client.connected()) {
while (!client.connected()) {
Serial.println("not connected to MQTT");
client.connect("ESP8266Client");
delay(10000);
}
}
if (sht1.readSample()) {
humidity = sht1.getHumidity();
temperature = sht1.getTemperature();
Serial.print("Temperatur:");
Serial.println(temperature);
Serial.print("Feuchtigkeit:");
Serial.println(humidity);
} else {
Serial.print("Sensor 1: Error in readSample()\n");
}
client.loop();
Serial.println("Connected to MQTT");
char tempString[8];
dtostrf(temperature, 1, 2, tempString);
char humString[8];
dtostrf(humidity, 1, 2, humString);
uint8_t datasend[70];
char data[100] = "\0";
for (int i = 0; i < 100; i++)
{
data[i] = node_id[i];
}
strcat(data,"{");
strcat(data, "ent=100,id=111,l=1234,temp=");
strcat(data, tempString);
strcat(data, ",humid=");
strcat(data, humString);
strcat(data, "}");
strcpy((char *)datasend, data);
client.publish("sensor/downunder/90008", (char *)datasend);
//client.publish("/downunder/temphum", "Hello World");
delay(10000);
} ```
