Модули 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), но ничего...
Я упустил что-то очевидное? (У меня слабый электронный бэкграунд, по профессии я веб-разработчик). Есть ли способ проверить, действительно ли данные отправлены? Как я могу отлаживать эти модули?
@Damien Pirsy, 👍0
Обсуждение1 ответ
Лучший ответ:
Что бы это ни стоило, мне удалось заставить их снова работать, немного поигравшись с настройками обоих модулей.
Используя простой тестовый скетч, я отдал несколько AT-команд обоим модулям; Я уже пытался установить для них настройки ПО УМОЛЧАНИЮ с помощью AT+DEFAULT, но это было бесполезно. Я решил оставить режим как есть (FU3), то же самое для последовательной скорости (B9600), но я попытался переключить канал, поэтому я установил оба модуля с помощью AT+C002.
Это сделало свое дело, возможно, это было какое-то внешнее вмешательство или неточность в настройках канала — я просто знаю, что уже неделю они нормально общаются, и это главное.
Поэтому, если они не могут связаться, сначала попробуйте изменить их настройки, не думайте, что настройки ПО УМОЛЧАНИЮ наверняка работают.
Для дальней дистанции лучше использовать FU4, даже если это медленноооооо., @Peter
- Откуда берутся эти ненужные символы (из serial)?
- AT-команда не отвечает на последовательный монитор
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- Как связаться с ESP8266 ESP01, отправив данные через программный сериал на Arduino Uno?
- Последовательная связь от Arduino до ESP8266 NodeMCU работает, но от NodeMCU до Arduino не работает
- HLW8032 UART отправляет случайные данные (регистры часто переполняются)
- Проблема последовательной связи с общей землей SIM800L
- Повреждение данных SoftwareSerial - поиск предложений
почему бы просто не запустить DHT11 и LM35 из ESP и не тратить время на отладку? Вы также должны использовать обработчики
server.on
вместо мучительно низкоуровневогоclient.connected
., @dandavis@dandavis Потому что там, где я ставлю датчики, нет подключения к Wi-Fi (это -1-й этаж, я живу на 2-м), а также я планирую добавить к приемнику другие устройства. Но, пожалуйста, не зацикливайтесь на ESP, проблема, похоже, в другом., @Damien Pirsy
Вы проверили, что ваш ресивер подключается к WiFi?, @gbg
@gbg Забудьте о WIFI (во всяком случае, да, он есть), я больше не могу получать с HC-12 (раньше он работал), @Damien Pirsy