Я хочу получить JSON строку значения датчика DHT22 (температура и влажность) с этого ESP8266WiFi через WiFi.
#include <DHT.h> //library DHT.h
#include <ESP8266WiFi.h>
#define DHTPIN 14 // GPIO14
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE, 15);
const char* ssid = "myhotspot";
const char* password = "mypassword";
WiFiServer server(80);
void setup() {
Serial.begin(115200);
dht.begin();
Serial.println();
Serial.print("Wifi connecting to ");
Serial.println( ssid );
WiFi.begin(ssid,password);
Serial.println();
Serial.print("Connecting");
while( WiFi.status() != WL_CONNECTED ){
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("Wifi Connected Success!");
Serial.print("NodeMCU IP Address : ");
Serial.println(WiFi.localIP() );
server.begin();
Serial.println("NodeMCU Server started");
// Print the IP address
Serial.print("Use this URL to connect: ");
Serial.print("http://");
Serial.print(WiFi.localIP());
Serial.println("/");
}
void sendJsonString(float temperature, float humidity, String dataStatus, String reason){
/*
{
"data" : {
"temperature" : 0.0, // 0,NaN
"humidity" : 0.0
},
"status" : "OK", //OK, Error
"reason" : ""
}
*/
String s = "";
s += String("{");
s += String("\"temperature\" : " + String(temperature) + "," );
s += String("\"humidity\" : " + String(humidity) );
s += String("} ," );
Serial.println(s); //this line specifically
}
void loop() {
// Reading temperature or humidity takes about 250 milliseconds!
delayMicroseconds(250);
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
delay(2000);
// Set up data
float h = dht.readHumidity();
float t = dht.readTemperature();
// check if returns are valid, if they are NaN (not a number) then something went wrong!
float temperature = t;
float humidity = h;
String dataStatus = "OK";
String reason = "";
if (isnan(t) || isnan(h)) {
temperature = 0;
humidity = 0;
dataStatus = "Error";
reason = "Failed to read from DHT";
}
// Send data
sendJsonString(temperature, humidity, dataStatus, reason);
}
А затем используйте NodeJS, чтобы взять строку JSON и преобразовать ее в две строки: одну из температуры и одну из влажности, сохранить в переменной и добавить к ней дату и время.
var express = require('express')
var bodyParser = require('body-parser')
var app = express()
var cors = require('cors')
app.use(cors())
app.use(bodyParser.json())
app.set('port', (process.env.PORT || 9999))
app.use(bodyParser.urlencoded({extended: false}))
app.use(bodyParser.json())
app.post('/', function (req, res) {
var dateTime = new Date().toISOString().replace('T', ' ').substr(0, 19);
console.log(dateTime + ',' + req.body.temperature)
console.log(dateTime + ',' + req.body.humidity)
res.send('success : ' + req.body.temperature + ',' + req.body.humidity)
})
app.listen(app.get('port'), function () {
console.log('run at port', app.get('port'))
})
Затем, если возможно, я хочу использовать тот же файл кода NodeJS, чтобы использовать строки, которые я храню, для записи файлов CSV в форме, которую можно использовать для построения графика на веб-сервисе, с той же веб-страницей к этому проекту Raspberry Pi.
http://www.home-automation-community.com/temperature-and-humidity-from-am2302-dht22-sensor-displayed-as-chart/
В моем коде много несоответствий, поэтому было бы здорово, если бы пользователь Здесь могли бы предоставить мне, что я должен сделать, чтобы достичь своей цели. Я просто любитель в этой области. Заранее спасибо за помощь.