Sehr geehrte Damen und Herren,
am 25.3.24 habe ich schon den support kontaktiert, aber bisher noch keine Antwort erhalten. Deshalb versuche ich es über das Forum.
Eigentlich hatte ich gedacht, daß ich es hinbekommen werde, die Daten vom UV/Lichtsensor auf der Opensensemap darzustellen.
Das Einrichten der SenseBox auf der Opensensemap war kinderleicht (vielleicht habe ich hier einen Fehler gemacht?). Danke. ABER:
Nachdem ich geprüft habe, ob
- die neueste Firmware (19.6.1) installiert ist und
- die SSL-Zertifikate zu dem Board hochgeladen habe,
- meine Sensebox über einen WiFi-Hotspot (Smartphone) verbunden habe,
- den Code in Blockly geschrieben habe und in der Arduino IDE 1.8.7 auf das Board geladen habe,
- zeigt mir nur der serielle Monitor die Daten der beiden Sensoren an.
Die Datenübertragung zur SenseMap habe ich nun in unterschiedlichster Art und Weise (tutorials, Blog, Forum) mehrere Tage über Stunden (das sollte Minuten dauern, so wie mit dem WIO-Terminal und Ubidots!) hintereinander ausprobiert, aber es sind keine Daten verfügbar. Das ist echt frustrierend…
https://opensensemap.org/explore/65fae033ad2eb20007fdafe8
Da ich nun einfach nicht weiß, woran es liegt, würde ich Sie bitten, mich zu unterstützen. Dazu der Code. Mit freundlichen Grüßen, Matthias Birkicht
#include <senseBoxIO.h>
#include <WiFi101.h>
#include <VEML6070.h>
#include <LTR329.h>
#include <Wire.h>
char ssid[] = "wiotest";
char pass[] = "test1234";
int status = WL_IDLE_STATUS;
const long intervalInterval = 1000;
long time_startInterval = 0;
long time_actualInterval = 0;
VEML6070 veml;
bool lightsensortype = 0; //0 for tsl - 1 for ltr
//settings for LTR sensor
LTR329 LTR;
unsigned char gain = 1;
unsigned char integrationTime = 0;
unsigned char measurementRate = 3;
const char SENSOR_IDFEA[] PROGMEM = "65fae033ad2eb20007fdafea";
const char SENSOR_IDFE9[] PROGMEM = "65fae033ad2eb20007fdafe9";
static const uint8_t NUM_SENSORS = 2;
const char SENSEBOX_ID [] PROGMEM = "65fae033ad2eb20007fdafe8";
const char server [] PROGMEM ="ingress.opensensemap.org";
WiFiClient client;
typedef struct measurement {
const char *sensorId;
float value;
} measurement;
char buffer[750];
measurement measurements[NUM_SENSORS];
uint8_t num_measurements = 0;
const int lengthMultiplikator = 35;
int read_reg(byte address, uint8_t reg)
{
int i = 0;
Wire.beginTransmission(address);
Wire.write(reg);
Wire.endTransmission();
Wire.requestFrom((uint8_t)address, (uint8_t)1);
delay(1);
if(Wire.available())
i = Wire.read();
return i;
}
void write_reg(byte address, uint8_t reg, uint8_t val)
{
Wire.beginTransmission(address);
Wire.write(reg);
Wire.write(val);
Wire.endTransmission();
}
void Lightsensor_begin()
{
Wire.begin();
unsigned int u = 0;
u = read_reg(0x29, 0x80 | 0x0A); //id register
if ((u & 0xF0) == 0xA0) // TSL45315
{
write_reg(0x29, 0x80 | 0x00, 0x03); //control: power on
write_reg(0x29, 0x80 | 0x01, 0x02); //config: M=4 T=100ms
delay(120);
lightsensortype = 0; //TSL45315
}
else
{
LTR.begin();
LTR.setControl(gain, false, false);
LTR.setMeasurementRate(integrationTime, measurementRate);
LTR.setPowerUp(); //power on with default settings
delay(10); //Wait 10 ms (max) - wakeup time from standby
lightsensortype = 1; //
}
}
uint32_t Lightsensor_getIlluminance()
{
unsigned int lux = 0;
if (lightsensortype == 0) // TSL45315
{
unsigned int u = (read_reg(0x29, 0x80 | 0x04) << 0); //data low
u |= (read_reg(0x29, 0x80 | 0x05) << 8); //data high
lux = u * 4; // calc lux with M=4 and T=100ms
}
else if (lightsensortype == 1) //LTR-329ALS-01
{
delay(100);
unsigned int data0, data1;
for (int i = 0; i < 5; i++) {
if (LTR.getData(data0, data1)) {
if(LTR.getLugain, integrationTime, data0, data1, lux));
if(lux > 0) break;
else delay(10);
}
else {
byte error = LTR.getError();
}
}
}
return lux;
}
void addMeasurement(const char *sensorId, float value) {
measurements[num_measurements].sensorId = sensorId;
measurements[num_measurements].value = value;
num_measurements++;
}
void writeMeasurementsToClient() {
// iterate throug the measurements array
for (uint8_t i = 0; i < num_measurements; i++) {
sprintf_P(buffer, PSTR("%s,%9.2f\n"), measurements[i].sensorId,
measurements[i].value);
// transmit buffer to client
client.print(buffer);
}
// reset num_measurements
num_measurements = 0;
}
void submitValues() {
if (WiFi.status() != WL_CONNECTED) {
WiFi.disconnect();
delay(1000); // wait 1s
WiFi.begin(ssid, pass);
delay(5000); // wait 5s
}
if (client.connected()) {
client.stop();
delay(1000);
}
bool connected = false;
char _server[strlen_P(server)];
strcpy_P(_server, server);
for (uint8_t timeout = 2; timeout != 0; timeout--) {
Serial.println(F("connecting..."));
connected = client.connect(_server, 80);
if (connected == true) {
// construct the HTTP POST request:
sprintf_P(buffer,
PSTR("POST /boxes/%s/data HTTP/1.1\nAuthorization: adc1c0da8f3af2a2c5c87840e19921cc6c3796bcbdeba71d4c92f015ffb18dbc\nHost: %s\nContent-Type: "
"text/csv\nConnection: close\nContent-Length: %i\n\n"),
SENSEBOX_ID, server, num_measurements * lengthMultiplikator);
// send the HTTP POST request:
client.print(buffer);
// send measurements
writeMeasurementsToClient();
// send empty line to end the request
client.println();
uint16_t timeout = 0;
// allow the response to be computed
while (timeout <= 5000) {
delay(10);
timeout = timeout + 10;
if (client.available()) {
break;
}
}
while (client.available()) {
char c = client.read();
// if the server's disconnected, stop the client:
if (!client.connected()) {
client.stop();
break;
}
}
num_measurements = 0;
break;
}
delay(1000);
}
if (connected == false) {
delay(5000);
noInterrupts();
NVIC_SystemReset();
while (1)
;
}
}
void setup() {
if (WiFi.status() == WL_NO_SHIELD) {
while (true);
}
while (status != WL_CONNECTED) {
status = WiFi.begin(ssid, pass);
delay(5000);
}
SerialUSB.begin(9600);
veml.begin();
Lightsensor_begin();
}
void loop() {
time_startInterval = millis();
if (time_startInterval > time_actualInterval + intervalInterval) {
time_actualInterval = millis();
SerialUSB.println(veml.getUV());
SerialUSB.println(Lightsensor_getIlluminance());
}
if (time_startInterval > time_actualInterval + intervalInterval) {
time_actualInterval = millis();
addMeasurement(SENSOR_IDFEA,veml.getUV());
addMeasurement(SENSOR_IDFE9,Lightsensor_getIlluminance());
submitValues();
}
}