一、概述
1. ESP8266紅外功能及庫
ESP8266 支持通過紅外接收器和紅外LED進行紅外收發(fā)功能。
ESP8266的紅外收發(fā)功能需要借助外部庫,常用的庫有IRremoteESP8266、IRremote、IRLib2等。
IRremoteESP8266庫是專門為ESP8266芯片設計的紅外收發(fā)庫,它支持多種協議,包括NEC、Sony、RC5、RC6等,還支持學習和發(fā)送紅外信號。
另外IRremote庫和IRLib2庫也是常用的紅外收發(fā)庫,但這兩個庫不是專門為ESP8266設計的,需要進行相應的適配。
2. 紅外收發(fā)常見步驟
使用這些庫進行紅外收發(fā)時,一般需要進行以下步驟:
- 初始化紅外收發(fā)器和紅外LED引腳,一般使用IRrecv和IRsend對象進行操作。
- 在循環(huán)中檢測是否有紅外信號接收到,使用IRrecv對象的decode方法對信號進行解碼。
- 根據解碼后的數據判斷紅外信號的類型和命令,進行相應的操作。
- 使用IRsend對象的send*方法發(fā)送紅外信號。
二、發(fā)送端
1. 電路接線
下面將紅外發(fā)射管接在GPIO4(D2)引腳,為防止燒管,可以在紅外發(fā)射管和地之間串聯一個1K電阻。
下面的程序實現了從串口讀入4個字節(jié),然后通過紅外發(fā)射出去。
2. 源代碼
#include
int IR_S = 4; //接arduino 8號引腳
IRsend irsend(IR_S);
void setup()
{
pinMode(IR_S, OUTPUT);
Serial.begin(9600); // 9600 波特率
}
void loop()
{
uint8_t buffer[4];
if ( Serial.available()>=4) {
Serial.readBytes(buffer, 4);
uint32_t data = buffer[0] << 24 | buffer[1] << 16 | buffer[2] <<8 | buffer[3];
Serial.println(data, HEX);
irsend.sendSony(data, 32);
}
delay(1000);
}
3. sendSony介紹
這里重點是使用sendSony方法,函數定義:irsend.sendSony(data, nbits)
- data 要發(fā)送的數據
- nbits 紅外碼的位數
如果要發(fā)送0x0a9,那么使用Sony紅外協議發(fā)送,可以使用下面的代碼:
irsend.sendSony(0x0A9, 12);
假設現在要發(fā)送 0x9AB32AFC,轉換為二進制數
10011010101100110010101011111100,
然后,我們按照 Sony 協議的格式構造數據,即:
起始位(4位) 設備地址(7位) 命令數據(8位)
0101 0000001 00110101
其中,起始位是固定的 0101,設備地址可以是 0 到 127 之間的任意一個值,這里我們假設設備地址為 1,所以設備地址的二進制表示為 0000001。
接下來是命令數據,我們將 0x9AB32AFC 轉換為二進制后,從左到右依次填入,不足 8 位則在高位補零。因此,命令數據的二進制表示為 10011010 10110011 00101010 11111100,這里我們將這 4 個字節(jié)從左到右依次排列,即
10011010101100110010101011111100。
最后,在命令數據的右邊再添加一位結束位,固定為 0。因此,最終的數據為 0101 0000001 10011010 10110011 00101010 11111100 0。
將這個二進制數轉換為十進制數,即 1413266032。因此,對于發(fā)送 0x9AB32AFC 的情況,irsend.sendSony(0x9AB32AFC, 32) 中的第二個參數應為 32。
二、接收
下面把帶解碼功能的紅外接收管(型號1838B)接在了D5引腳。接收直接調用IRremote.h庫。
1. 源代碼
#include
int RECV_PIN = D5;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); //初始化紅外遙控
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
// 接收下一個值
irrecv.resume();
}
delay(150);
}
-
led
+關注
關注
240文章
22905瀏覽量
650072 -
信號
+關注
關注
11文章
2739瀏覽量
76166 -
串口
+關注
關注
14文章
1533瀏覽量
75449 -
紅外接收器
+關注
關注
2文章
42瀏覽量
19029 -
ESP8266
+關注
關注
50文章
959瀏覽量
44539
發(fā)布評論請先 登錄
相關推薦
評論