/* Eksempel-kode-3 Dette kodeeksempelet kobler opp mot en webserver ved hjelp av et MKR NB 1500 kort. Koden lager dummy-data med noe random tillegg. Koden legger dataene på URL-adressen "http://sensor.marin.ntnu.no" samtidig som den skriver måledatene til Seriemonitoren. Koden kjøres 5 ganger før den avsluttes. Circuit: - MKR NB 1500 board - Antenna - SIM-kort Utviklet av Tom Igor 08.03.12 Modifisert av Håvard Holm 2021 Modifisert av Nils Kr. Rossing 08.09.22 */ // libraries #include // PIN Number const char PINNUMBER[] = ""; // initialize the library instance NBClient client; GPRS gprs; NB nbAccess; // URL, path og port char server[] = "sensor.marin.ntnu.no"; char path[] = "/cgi-bin/tof.cgi?"; int port = 80; // port 80 er default for HTTP // Deklarasjon av sensorvariabler fra ENV-kort float temperature = 0; // Målt lufttemperatur i C float humidity = 0; // Målt luftfuktighet i % float pressure = 0; // Målt lufttrykk i mBar float illuminance = 0; // Målt lysintensitet i Lux // Deklarer sensorvariable fra vannsensorer float w_temperature = 0;// Målt vanntemperatur // Deklarasjon av sensorvariabler fra GPS-kort float latitude; // Breddegrad float longitude; // Lengdegrad float altitude; // Høyde over havet float speed; // Beregnet hastighet float timeSec; // Antall sekunder fra 1.1.1980 - Epoketid int satellites; // Antall satellitter long no = 0; // Måling nummer // Deklarasjon av buffer for dataoverføring char buffer[256]; boolean connected = false; // Status oppkobling void setup() { Serial.begin(115200); // Initialiser monitoren while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } } void loop() { for(int i=1; i<6; i++) { no=i; readGPSdata(); // Les GPS-posisjon mm readENVdata(); // Les ENV-målinger readWaterData(); // Les av sensorer i vann printDataToMonitor(); // Skriv måleverdier til monitor i samme format som datafila connectToGPRS(); // Koble opp til GPRS nettverket med APN, login og passord Serial.print("Kobler til og overfører data: "); Serial.println(no); connectToServer(); // Overfør data til server //checkServerMessage(); // Sjekk om det er noen melding fra serveren til sensornoden delay(5000); } for(;;) // Stopp programmet ; } void connectToGPRS() { // Koble opp til GPRS nettverket med APN, login og passord Serial.println("Starter Arduino web-client."); while (!connected) { if ((nbAccess.begin("", true, true) == NB_READY) && (gprs.attachGPRS() == GPRS_READY)) { connected = true; Serial.println("Tilkoblet GPRS"); } else { Serial.println("Ikke tilkoblet GPRS"); delay(1000); } } } void connectToServer() { // Koble opp til server og send over data, varsler om oppkobling mislykkes if (client.connect(server, port)) { Serial.println("Tilkoblet server"); client.print("GET "); // Gjør et HTTP request: sprintf(buffer, "/cgi-bin/tof.cgi?Gr-no,no=%d,time=%.2f,lat=%.6f,lon=%.6f,C_luft=%.1f,C_vann=%.1f,hum=%.1f,pres=%.1f,light=%.1f", no, timeSec, longitude, latitude, temperature, w_temperature, humidity, pressure, illuminance); // Legg måleverdier inn i bufferet client.print(buffer); client.println(" HTTP/1.1"); client.print("Host: "); client.println(server); client.println("Connection: close"); client.println(); } else { Serial.println("Mislykket tilkobling til server"); // Dersom tilkobling mislyktes } } void checkServerMessage() { // Dersom det er innkommende data fra serveren, les dem og skriv dem ut if (client.available()) { Serial.print((char)client.read()); } // Dersom serveren er frakoblet stopp klienten: if (!client.available() && !client.connected()) { Serial.println(); Serial.println("Kobler fra klienten"); client.stop(); // do nothing forevermore: for (;;) ; } } void readGPSdata() { Serial.println("Leser GPS-data"); latitude = 63.426269 + random(0, 9)/100.0; longitude = 10.454045 + random(0, 9)/10.0; altitude = 65 + random(0, 4); speed = 0 + random(0, 9); satellites = 6; timeSec = millis()/1000.0; } void readENVdata() { Serial.println("Leser miljo-data"); temperature = 21.0; humidity = 45.5; pressure = 1089.3; illuminance = 148.5; } void readWaterData() { Serial.println("Leser vanntemperatur"); w_temperature = 12.0; } void printDataToMonitor() { sprintf(buffer, "Gr-1, no=%d,time=%.2f,lat=%.6f,lon=%.6f,C_luft=%.1f,C_vann=%.1f,hum=%.1f,pres=%.1f,light=%.1f", no, timeSec, longitude, latitude, temperature, w_temperature, humidity, pressure, illuminance); // Legg måleverdier inn i bufferet Serial.println(buffer); }