Страница 1 из 1

Json получение данных из UART

Добавлено: 09 фев 2025, 14:36
iotaxxx
Приветствую всех,сразу скажу я не программист,поэтому какахами не кидаться)
Есть насущный проект из двух плат:nano-отдаёт данные в сериал,нода принимает.
Не могу понять,как построить приём переменных из сериал в flp.
Показать

Код: Выделить всё

#include <Wire.h>
#include <Adafruit_AHTX0.h>
#include "SparkFun_ENS160.h"
#include <ArduinoJson.h>
#include <SoftwareSerial.h>

// Объекты датчиков
Adafruit_AHTX0 aht;
SparkFun_ENS160 myENS;

// SoftwareSerial (если нужно)
SoftwareSerial mySerial(10, 11);

// Переменные для millis()
unsigned long previousMillis = 0;
const long interval = 1000; // Интервал обновления данных (1 секунда)

void setup() {
  // Инициализация Serial порта
  Serial.begin(115200);
  Serial.println("AHT21 и ENS160");

  // Инициализация I2C
  Wire.begin();

  // Инициализация SoftwareSerial (если нужно)
  mySerial.begin(9600);

  // Проверка подключения AHT21
  if (!aht.begin()) {
    Serial.println("Ошибка: AHT21 не найден. Проверьте подключение.");
    while (1) ; // Остановка выполнения
  }
  Serial.println("AHT21 подключен.");

  // Проверка подключения ENS160
  if (!myENS.begin()) {
    Serial.println("Ошибка: ENS160 не найден. Проверьте подключение.");
    while (1) ; // Остановка выполнения
  }
  Serial.println("ENS160 подключен.");

  // Инициализация ENS160
  if (myENS.setOperatingMode(SFE_ENS160_RESET)) {
    Serial.println("ENS160 сброшен.");
  } else {
    Serial.println("Ошибка сброса ENS160.");
  }
  delay(100);

  myENS.setOperatingMode(SFE_ENS160_STANDARD);
  int ensStatus = myENS.getFlags();
  Serial.print("Статус ENS160 (0 - норм, 1 - разогрев, 2 - запуск): ");
  Serial.println(ensStatus);
}

void loop() {
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;

    // Чтение данных с AHT21
    sensors_event_t humidity, temp;
    aht.getEvent(&humidity, &temp);

    // Обработка ошибок AHT21 (опционально)
    if (isnan(temp.temperature) || isnan(humidity.relative_humidity)) {
      Serial.println("Ошибка чтения данных с AHT21.");
      return; // Выход из цикла loop() для текущей итерации
    }

    float temperature = temp.temperature;
    float relative_humidity = humidity.relative_humidity;

    // Чтение данных с ENS160
    if (myENS.checkDataStatus()) {
      int aqi = myENS.getAQI();
      int tvoc = myENS.getTVOC();
      int eco2 = myENS.getECO2();
      int ensStatus = myENS.getFlags();

      // Формирование JSON
      StaticJsonDocument<200> doc;
      doc["temperature"] = temperature;
      doc["humidity"] = relative_humidity;
      doc["aqi"] = aqi;
      doc["tvoc"] = tvoc;
      doc["eco2"] = eco2;
      doc["ens_status"] = ensStatus;

      // Отправка JSON через Serial
      serializeJson(doc, Serial);
      Serial.println();

      // Отправка JSON через SoftwareSerial (если нужно)
      serializeJson(doc, mySerial);
      mySerial.println();

    } else {
      Serial.println("Данные с ENS160 пока не готовы.");
    }
  }

  // Другой код, который может выполняться параллельно
}

Re: Json получение данных из UART

Добавлено: 09 фев 2025, 15:49
Phazz
А куда передаёте?

Re: Json получение данных из UART

Добавлено: 09 фев 2025, 15:59
iotaxxx
проект из двух плат:nano-отдаёт данные в сериал,нода принимает.
nodemcu должна забрать данные из сериал и раскинуть по переменным.
как это постоить в FLP?

Re: Json получение данных из UART

Добавлено: 09 фев 2025, 16:49
Phazz
А чем передача переменных через уарт не подходит?