ESP8266/NodeMCU och liknande ska nog inte vara så svårt att få till, då går det att få wifi.
Titta på olika alternativ för rapportering
http://wiki.temperatur.nu/index.php/Rap ... peratur.nu
Rapporteringsurl tror jag är enklast, hårdkoda in en, eller två för två sensorer, adreser som besöks med jämna mellanrum, typ
www. temperatur .nu/rapportera.php?hash=1130a550a5e619d962e0f3da4755d4e4&t=12.2
DS18b20 som sensor, lätt att läsa av.
Jag har satt ihop ett par NodeMCU med temperaturmätning men då skickar jag till Thingspeak.
Ta en titt på koden som innehåller några bra grejer, typ ett wifibibliotek som startar i AP-läge så att man väljer via telefonen vilket nät man vill koppla sig till, och en del onödigt i form av ultraljudssensor och ett försök att sortera ultraljudsmätningar för att kolla snödjup;
Givarnas adresser är hårdkodade in i programmet för att kunna skilja på dem.
http://karlander.net/temperatur/marktemperatur.html
Kod: Markera allt
//Lars Karlander 2016
#include <ESP8266WiFi.h> //https://github.com/esp8266/Arduino
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h> //https://github.com/tzapu/WiFiManager
#include "ThingSpeak.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#include <NewPing.h>
#define TRIGGER_PIN D1 // Pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN D2 //Pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 350 // Maximum distance we want t ping for (in cm).
#define ONE_WIRE_BUS D4 // 1-wire data pin for temp sensors
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
// NewPing setup of pins and maximum distance.
#define CNT 921 // Array for averaging sonar value
int d[CNT];
unsigned long looptime;
// Assign the addresses of 1-Wire temp sensors, max 6 sensors, 8 if no rssi or sonar.
// Missing sensor will give -127.00C reading
DeviceAddress Temp1 = { 0x28, 0x44, 0xC3, 0xAF, 0x06, 0x00, 0x00, 0x39 }; //-10cm
DeviceAddress Temp2 = { 0x28, 0x70, 0x18, 0xB1, 0x06, 0x00, 0x00, 0x0B }; //-30cm
DeviceAddress Temp3 = { 0x28, 0x49, 0xA9, 0xAF, 0x06, 0x00, 0x00, 0xDF }; //-60cm
DeviceAddress Temp4 = { 0x28, 0xA5, 0x9F, 0xAF, 0x06, 0x00, 0x00, 0x93 }; //-100cm
DeviceAddress Temp5 = { 0x28, 0x57, 0xEB, 0xAF, 0x06, 0x00, 0x00, 0xFD }; //-150cm
DeviceAddress Temp6 = { 0x28, 0x2D, 0xB0, 0xB0, 0x06, 0x00, 0x00, 0xED }; //-200cm
DeviceAddress Temp7 = { 0x28, 0x0E, 0xDA, 0xB0, 0x06, 0x00, 0x00, 0xAE };
unsigned long sleeptime =251000; //milliseconds
unsigned long myChannelNumber = 75712;
const char * myWriteAPIKey = "XXXXXXXXXXXXX";
WiFiClient client;
void setup() {
Serial.begin(9600);
Serial.println("Startar...");
//WiFiManager
//Local intialization. Once its business is done, there is no need to keep it around
WiFiManager wifiManager;
//reset saved settings
//wifiManager.resetSettings();
//set custom ip for portal
//wifiManager.setAPConfig(IPAddress(10,0,1,1),
IPAddress(10,0,1,1), IPAddress(255,255,255,0));
//fetches ssid and pass from eeprom and tries to connect
//if it does not connect it starts an access point with the specified name
wifiManager.autoConnect("NodeMCU-01-wifi-setup");
//if you get here you have connected to the WiFi
Serial.println("connected...yeey :)");
sensors.begin();
// set the resolution
sensors.setResolution(Temp1, 12);
sensors.setResolution(Temp2, 12);
sensors.setResolution(Temp3, 12);
sensors.setResolution(Temp4, 12);
sensors.setResolution(Temp5, 12);
sensors.setResolution(Temp6, 12);
ThingSpeak.begin(client);
}
void loop() {
looptime=millis(); // Kolla tiden för ett varv
int i;
long m;
long m2; //mean value from middle of array
int loopcount;
m2=0;
loopcount=0;
Serial.println("Start pinging!");
for(i=0; i<CNT; i++)
{
d[i] = (sonar.ping_cm());
delay (40);
loopcount=loopcount+1;
if (loopcount==40) {
Serial.print((i*100)/CNT);
Serial.print("% ");
loopcount=0;
} //end if 921 loops
}
Serial.println(" ");
Serial.println("Done pinging, start sorting");
sort(d,CNT);
Serial.println("Done sorting");
for(i=900; i<CNT-10; i++)
{
m2=m2+d[i];
// Serial.println(d[i]);
}
m2=m2/(CNT-910);
//Print Temperatures
Serial.println("Getting temperatures...");
sensors.requestTemperatures();
float t1 = sensors.getTempC(Temp1);
delay(50);
float t2 = sensors.getTempC(Temp2);
delay(50);
float t3 = sensors.getTempC(Temp3);
delay(50);
float t4 = sensors.getTempC(Temp4);
delay(50);
float t5 = sensors.getTempC(Temp5);
delay(50);
float t6 = sensors.getTempC(Temp6);
ThingSpeak.setField(1,t1);
ThingSpeak.setField(2,t2);
ThingSpeak.setField(3,t3);
ThingSpeak.setField(4,t4);
ThingSpeak.setField(5,t5);
ThingSpeak.setField(6,t6);
ThingSpeak.setField(7,m2); //average sonar reading in field 7
Serial.print("Temp 1 is: ");
Serial.print(t1);
Serial.println("C: ");
Serial.print("Temp 2 is: ");
Serial.print(t2);
Serial.println("C: ");
Serial.print("Temp 3 is: ");
Serial.print(t3);
Serial.println("C: ");
Serial.print("Temp 4 is: ");
Serial.print(t4);
Serial.println("C: ");
Serial.print("Temp 5 is: ");
Serial.print(t5);
Serial.println("C: ");
Serial.print("Temp 6 is: ");
Serial.print(t6);
Serial.println("C: ");
Serial.println("");
Serial.print("Medel2, values cut:");
Serial.println(m2);
// print your WiFi IP address:
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
// print the received signal strength:
long rssi = WiFi.RSSI();
Serial.print("RSSI:");
Serial.println(rssi);
ThingSpeak.setField(8,rssi);
// Write the fields that you've set all at once.
ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
delay(sleeptime);
Serial.print("Looptime last loop ");
Serial.print((millis()-looptime)/1000);
Serial.print(" Seconds, and of that was ");
Serial.print(sleeptime/1000);
Serial.println(" seconds sleeptime, the rest pingtime");
}
void sort(int a[], int size) {
for(int i=0; i<(size-1); i++) {
for(int o=0;
o<(size-(i+1)); o++) {
if(a[o] > a[o+1]) {
int t = a[o];
a[o] = a[o+1];
a[o+1] = t;
}
}
}
}