Модули HC-12 перестали принимать, не могу понять почему

Я создал простой передатчик с HC-12 и Arduino Nano (клон), куда я отправляю значения DHT11 и LM35 к приемнику, состоящему только из Wemos D1 и другого HC-12.

Установка действительно проста и работала нормально пару дней (передатчик в подвале на 2 этажа ниже, приемник в моей гостиной, он правильно отправлял данные на мой собственный сервер), затем я отключил приемник и модифицировал передатчик. добавить библиотеку JSON; когда я снова подключил их, приемник больше ничего не получает. Передатчик, кажется, работает нормально, по крайней мере, он печатает количество байтов, записанных в Serial Monitor.

Я пробовал:

  • возврат к рабочей версии (без JSON), но все по-прежнему
  • протестировал каждый из модулей HC12 с помощью простого тестового кода и AT-команд, все они реагируют и все настроены на заводскую конфигурацию, как это было на самом деле (AT+DEFAULT)
  • сделал еще один приемник с Arduino Uno и ЖК-дисплеем — установка, которую я успешно использовал до перехода на Wemos. Странно, теперь и эта установка не работает...
  • Поменял модули и что я получил? Передатчик по-прежнему передает, приемник не принимает, ничего не изменилось.
    • Пытался отправить простую строку "Тест", но безрезультатно.

Соответствующий код:

Передатчик:

#include <ArduinoJson.h>      
#include <DHT_U.h>            // просто библиотека Adafruit
#include <DHT.h>
#include <SoftwareSerial.h>
#define DHTTYPE DHT11   // DHT 11
SoftwareSerial HC12(10, 11); // Контакт HC-12 TX, контакт HC-12 RX
int DHTPIN = 4;
int LMPIN = 5;
DHT dht(DHTPIN, DHTTYPE);
StaticJsonDocument<80> doc;


void setup() {
  analogReference(INTERNAL);
  Serial.begin(9600);             // Последовательный порт на компьютер
  HC12.begin(9600);               // Последовательный порт на HC12
  dht.begin();
}

void loop() {
  delay(5000);
  float h = dht.readHumidity(); 
  float t = dht.readTemperature();
  int reading = analogRead(LMPIN);
  float lmt = reading/9.31;
  doc["dht_h"] = h;
  doc["dht_t"] = t;
  doc["ds_t"] = lmt;
  char result[50];
  serializeJson(doc, result);
  Serial.println(result);
  int written = HC12.print(result);
  Serial.println(written);    // это 39 символов
}

Приемник (все разделы Wi-Fi удалены):

#include <ESP8266WiFi.h>
#include <SoftwareSerial.h>
#define STASSID "....."
#define STAPSK  "....."
SoftwareSerial HC12(D13, D15); // Контакт HC-12 TX, контакт HC-12 RX

const char* ssid     = STASSID;
const char* password = STAPSK;
const char* host = "...........";
const uint16_t port = 3000;

void setup() {
  Serial.begin(9600);
  HC12.begin(9600);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500); Serial.print(".");
  }
}

void loop() {

  String content = HC12.readString();
  Serial.println(content);
  if(content.length()) {
    // Это отправит строку на сервер
    Serial.println("sending data to server");
    if (client.connected()) {
      //....
    }
  }
  delay(1000);
}

Меня очень озадачил тот факт, что он перестал работать, и что оба модуля HC-12 работают нормально (по крайней мере, они реагируют на все AT-команды). Я даже пытался удалить arduino из системы и переустановить (теперь у меня самая последняя версия IDE), но ничего...

Я упустил что-то очевидное? (У меня слабый электронный бэкграунд, по профессии я веб-разработчик). Есть ли способ проверить, действительно ли данные отправлены? Как я могу отлаживать эти модули?

, 👍0

Обсуждение

почему бы просто не запустить DHT11 и LM35 из ESP и не тратить время на отладку? Вы также должны использовать обработчики server.on вместо мучительно низкоуровневого client.connected., @dandavis

@dandavis Потому что там, где я ставлю датчики, нет подключения к Wi-Fi (это -1-й этаж, я живу на 2-м), а также я планирую добавить к приемнику другие устройства. Но, пожалуйста, не зацикливайтесь на ESP, проблема, похоже, в другом., @Damien Pirsy

Вы проверили, что ваш ресивер подключается к WiFi?, @gbg

@gbg Забудьте о WIFI (во всяком случае, да, он есть), я больше не могу получать с HC-12 (раньше он работал), @Damien Pirsy


1 ответ


Лучший ответ:

2

Что бы это ни стоило, мне удалось заставить их снова работать, немного поигравшись с настройками обоих модулей.

Используя простой тестовый скетч, я отдал несколько AT-команд обоим модулям; Я уже пытался установить для них настройки ПО УМОЛЧАНИЮ с помощью AT+DEFAULT, но это было бесполезно. Я решил оставить режим как есть (FU3), то же самое для последовательной скорости (B9600), но я попытался переключить канал, поэтому я установил оба модуля с помощью AT+C002.

Это сделало свое дело, возможно, это было какое-то внешнее вмешательство или неточность в настройках канала — я просто знаю, что уже неделю они нормально общаются, и это главное.

Поэтому, если они не могут связаться, сначала попробуйте изменить их настройки, не думайте, что настройки ПО УМОЛЧАНИЮ наверняка работают.

,

Для дальней дистанции лучше использовать FU4, даже если это медленноооооо., @Peter