Jak nainstalovat integraci Drátek eInk do Home Assistantu
Průvodce instalací integrace Drátek eInk do Home Assistantu pomocí obchodu HACS.
Bezdrátová komunikace na frekvenci 433 MHz je mezi kutily velmi oblíbená především díky velkému dosahu a skvělé schopnosti procházet zdmi a překážkami. Obyčejné levné moduly (jako například známý vysílač FS1000A) ale umí data posílat jen jedním směrem a v éteru často trpí rušením. Mnohem lepším řešením je rádiový modul CC1101, který zvládá vysílání i příjem a v kombinaci s oblíbeným ESP32 tvoří spolehlivou bezdrátovou linku.
V tomto návodu si ukážeme, jak mezi dvěma deskami ESP32 vytvořit obousměrnou komunikaci na principu Ping-Pong. Vysílač (TX) každou sekundu odešle zprávu ping a ihned začne čekat na odpověď. Přijímač (RX) zprávu zachytí, odfiltruje okolní šum, zkontroluje správnost dat a automaticky odpoví zprávou pong. Na obou stranách si navíc do sériového monitoru vypíšeme sílu signálu (RSSI) i kvalitu spojení (LQI).
Pokud s deskami ESP32 teprve začínáte a nemáte je ještě v prostředí zprovozněné, podívejte se nejprve na náš návod Jak přidat desky ESP32 do Arduino IDE.
Modul CC1101 komunikuje s mikrokontrolérem ESP32 přes standardní sběrnici SPI a přerušovací pin GDO0.
DŮLEŽITÉ UPOZORNĚNÍ: Modul CC1101 vyžaduje napájení pouze 3,3 V. Napájejte jej proto výhradně z pinu 3V3 na desce ESP32. Pokud byste modul připojili na 5V (nebo pin VIN), došlo by k jeho zničení!
Pro správnou funkci modulu CC1101 je nezbytné mít v Arduino IDE nainstalovanou příslušnou knihovnu.
Potřebnou knihovnu SmartRC-CC1101-Driver-Lib naleznete v Manažeru knihoven v Arduino IDE (případně můžete využít knihovnu přiloženou v souborech ke stažení). Podrobný postup pro práci s knihovnami naleznete v tomto návodu:
Než se pustíte do nahrávání, v nabídce Nástroje zvolte vaši desku (např. ESP32 Dev Module) a správný COM port. Kliknutím na tlačítko Nahrát spusťte nahrávání programu. Pokud se objeví výpis Connecting..., stačí krátce podržet tlačítko BOOT na desce ESP32.
#include <ELECHOUSE_CC1101_SRC_DRV.h> // Vložení knihovny pro komunikaci s modulem CC1101
// Definice pinů pro ESP32
#define CC1101_CSN 5
#define CC1101_GDO0 4
#define CC1101_GDO2 15
// Časovač pro periodické odesílání
unsigned long lastSend = 0;
void setup() {
// Spuštění sériové komunikace pro výpis do Sériového monitoru
Serial.begin(115200);
delay(1000);
Serial.println("--- ESP32 + CC1101 Transmitter Start ---");
// Nastavení vlastních SPI pinů a pinu GDO pro ESP32
ELECHOUSE_cc1101.setSpiPin(18, 19, 23, CC1101_CSN);
ELECHOUSE_cc1101.setGDO0(CC1101_GDO0);
// Inicializace modulu CC1101
ELECHOUSE_cc1101.Init();
// Kontrola komunikace po sběrnici SPI
if (!ELECHOUSE_cc1101.getCC1101()) {
Serial.println("Chyba modulu CC1101! Zkontrolujte zapojeni.");
while (1) {
delay(1000);
}
}
Serial.println("CC1101 uspesne inicializovan.");
// Konfigurace pro spolehlivou komunikaci v pásmu 433 MHz
ELECHOUSE_cc1101.setCCMode(1); // Zapnutí paketového režimu s FIFO bufferem
ELECHOUSE_cc1101.setMHZ(433.92); // Nastavení frekvence 433.92 MHz
ELECHOUSE_cc1101.setSyncWord(0x12, 0x34); // Synchronizační slovo pro filtr cizích zpráv
ELECHOUSE_cc1101.setCrc(1); // Kontrola integrity dat CRC
ELECHOUSE_cc1101.setPacketLength(61); // Maximální délka paketu v bufferu
// Nastavení registrů pro modulaci 2-FSK (rychlost 4.8 kBaud a šířka pásma 100 kHz)
ELECHOUSE_cc1101.SpiWriteReg(0x10, 0xC7);
ELECHOUSE_cc1101.SpiWriteReg(0x11, 0x83);
ELECHOUSE_cc1101.SpiWriteReg(0x12, 0x02);
ELECHOUSE_cc1101.SpiWriteReg(0x15, 0x40);
ELECHOUSE_cc1101.SpiWriteReg(0x22, 0x10);
ELECHOUSE_cc1101.setPA(10); // Nastavení maximálního výkonu +10 dBm
// Přepnutí do režimu příjmu pro zachycení odpovědi
ELECHOUSE_cc1101.SetRx();
}
void loop() {
// Periodické odesílání každou sekundu
if (millis() - lastSend >= 1000) {
lastSend = millis();
Serial.print("Odesilam zpravu: ping ... ");
char msg[] = "ping";
ELECHOUSE_cc1101.SendData(msg, 30);
ELECHOUSE_cc1101.SetRx();
Serial.println("Odeslano.");
}
// Kontrola přijaté odpovědi v bufferu
if (ELECHOUSE_cc1101.CheckRxFifo(20)) {
byte buffer[64] = {0};
byte len = ELECHOUSE_cc1101.ReceiveData(buffer);
if (len > 0 & ELECHOUSE_cc1101.CheckCRC()) {
buffer[len] = ' ';
Serial.print("Prijata odpoved: ");
Serial.print((char*)buffer);
Serial.print(" | RSSI: ");
Serial.print(ELECHOUSE_cc1101.getRssi());
Serial.print(" dBm | LQI: ");
Serial.println(ELECHOUSE_cc1101.getLqi());
}
}
}
#include <ELECHOUSE_CC1101_SRC_DRV.h> // Vložení knihovny pro komunikaci s modulem CC1101
// Definice pinů pro ESP32
#define CC1101_CSN 5
#define CC1101_GDO0 4
#define CC1101_GDO2 15
void setup() {
// Spuštění sériové komunikace pro výpis do Sériového monitoru
Serial.begin(115200);
delay(1000);
Serial.println("--- ESP32 + CC1101 Receiver Start ---");
// Nastavení vlastních SPI pinů a pinu GDO pro ESP32
ELECHOUSE_cc1101.setSpiPin(18, 19, 23, CC1101_CSN);
ELECHOUSE_cc1101.setGDO0(CC1101_GDO0);
// Inicializace modulu CC1101
ELECHOUSE_cc1101.Init();
// Kontrola komunikace po sběrnici SPI
if (!ELECHOUSE_cc1101.getCC1101()) {
Serial.println("Chyba modulu CC1101! Zkontrolujte zapojeni.");
while (1) {
delay(1000);
}
}
Serial.println("CC1101 uspesne inicializovan.");
// Konfigurace pro spolehlivou komunikaci v pásmu 433 MHz
ELECHOUSE_cc1101.setCCMode(1); // Zapnutí paketového režimu s FIFO bufferem
ELECHOUSE_cc1101.setMHZ(433.92); // Nastavení frekvence 433.92 MHz
ELECHOUSE_cc1101.setSyncWord(0x12, 0x34); // Synchronizační slovo pro filtr cizích zpráv
ELECHOUSE_cc1101.setCrc(1); // Kontrola integrity dat CRC
ELECHOUSE_cc1101.setPacketLength(61); // Maximální délka paketu v bufferu
// Nastavení registrů pro modulaci 2-FSK (rychlost 4.8 kBaud a šířka pásma 100 kHz)
ELECHOUSE_cc1101.SpiWriteReg(0x10, 0xC7);
ELECHOUSE_cc1101.SpiWriteReg(0x11, 0x83);
ELECHOUSE_cc1101.SpiWriteReg(0x12, 0x02);
ELECHOUSE_cc1101.SpiWriteReg(0x15, 0x40);
ELECHOUSE_cc1101.SpiWriteReg(0x22, 0x10);
ELECHOUSE_cc1101.setPA(10); // Nastavení maximálního výkonu +10 dBm
// Přepnutí do režimu trvalého příjmu
ELECHOUSE_cc1101.SetRx();
}
void loop() {
// Kontrola nového přijatého paketu v bufferu
if (ELECHOUSE_cc1101.CheckRxFifo(20)) {
byte buffer[64] = {0};
byte len = ELECHOUSE_cc1101.ReceiveData(buffer);
if (len > 0 & ELECHOUSE_cc1101.CheckCRC()) {
buffer[len] = ' ';
Serial.print("Prijata zprava: ");
Serial.print((char*)buffer);
Serial.print(" | RSSI: ");
Serial.print(ELECHOUSE_cc1101.getRssi());
Serial.print(" dBm | LQI: ");
Serial.println(ELECHOUSE_cc1101.getLqi());
// Pokud přijatá zpráva odpovídá textu ping, odešleme odpověď pong
if (strcmp((char*)buffer, "ping") == 0) {
delay(40);
Serial.print("Odpovidam: pong ... ");
char msg[] = "pong";
ELECHOUSE_cc1101.SendData(msg, 30);
ELECHOUSE_cc1101.SetRx();
Serial.println("Odeslano.");
}
}
}
}
Po nahrání obou programů uvidíte v Sériovém monitoru spolehlivou obousměrnou komunikaci v reálném čase:
Vysílač (TX):
--- ESP32 + CC1101 Transmitter Start --- CC1101 uspesne inicializovan. Odesilam zpravu: ping ... Odeslano. Prijata odpoved: pong | RSSI: -85 dBm | LQI: 0 Odesilam zpravu: ping ... Odeslano. Prijata odpoved: pong | RSSI: -86 dBm | LQI: 0
Přijímač (RX):
--- ESP32 + CC1101 Receiver Start --- CC1101 uspesne inicializovan. Prijata zprava: ping | RSSI: -81 dBm | LQI: 130 Odpovidam: pong ... Odeslano. Prijata zprava: ping | RSSI: -81 dBm | LQI: 130 Odpovidam: pong ... Odeslano.
Modul CC1101 představuje spolehlivé řešení pro bezdrátový přenos dat na frekvenci 433 MHz. Díky SPI rozhraní, hardwarovému CRC filtru a obousměrné komunikaci jde o výrazně kvalitnější alternativu k běžným levným modulům bez zpětné vazby.
Průvodce instalací integrace Drátek eInk do Home Assistantu pomocí obchodu HACS.
Návod, jak jednoduše přidat a nastavit Drátek e-ink displej do Home Assistant