Возьмите json строку из ESP8266WiFi и сохраните ее как строковую переменную в NodeJS для записи файла CSV - PullRequest
0 голосов
/ 08 февраля 2020

Я хочу получить 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/

В моем коде много несоответствий, поэтому было бы здорово, если бы пользователь Здесь могли бы предоставить мне, что я должен сделать, чтобы достичь своей цели. Я просто любитель в этой области. Заранее спасибо за помощь.

...