ESP-12F TSOP38 紅外線接收器(Infrared Receiver)程式是根據 NEC 紅外線通訊協定(Infrared Receiver Protocol)來編寫,但是筆者是使用 Origo 遙控器來測試 NEC 紅外線通訊協定,主要是在紅外線解碼上,要拆出 Mark 和 Space 的時間長度,對應 Origo 的紅外線通訊協定標準,完成後將資料顯示在 OLED 顯示屏上。
ESP8266 ESP-12F TSOP38 紅外線接收器 |
用 DSO 來讀取 ESP8266 ESP-12F TSOP38 紅外線接收器的信號 |
// Initialize all GPIOs
gpio_init();
// Setup GPIO2
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U,
FUNC_GPIO2);
// Disable internal
pullup/pulldown
PIN_PULLUP_DIS(PERIPHS_IO_MUX_GPIO2_U);
// Setup GPIO2 Interrupt
// Disable Interrupts by GPIO
ETS_GPIO_INTR_DISABLE();
// Attach interrupt handle when GPIO
interrupts.
ETS_GPIO_INTR_ATTACH(gpio_intr_handler,
&whatyouwant);
gpio_register_set(GPIO_PIN_ADDR(2),
GPIO_PIN_INT_TYPE_SET(GPIO_PIN_INTR_DISABLE) |
GPIO_PIN_PAD_DRIVER_SET(GPIO_PAD_DRIVER_DISABLE) |
GPIO_PIN_SOURCE_SET(GPIO_AS_PIN_SOURCE));
// Clear GPIO status
GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS,
BIT(2));
// Enable interrupt for his
GPIO
gpio_pin_intr_state_set(GPIO_ID_PIN(4), 2); // NEGEDGE
ETS_GPIO_INTR_ENABLE();
|
用 Origo 31A002 遙控器作發射紅外線信號 |
Origo 31A002 遙控器(Remote Controller)功能鍵 :
No.
|
Function
|
Key
|
Description
|
1
|
SPEED
|
1
|
0XFF20DF
|
2
|
POWER
|
1
|
0XFF28D7
|
3
|
TIMER
|
1
|
0XFF08F7
|
4
|
MODE
|
1
|
0XFF10EF
|
5
|
OSC
|
1
|
0XFF30CF
|
6
|
ION
|
1
|
0XFF18E7
|
Total
|
6
|
ESP8266 ESP-12F Origo 的紅外線通訊協定標準(IRremote.h):
// Decoded value for Origo
Remote
// Marks and Spaces are invert
// Speed=0xFF20DF,
Power=0xFF28D7, Timer=0xFF08F7
// Mode=0xFF10EF, OSC=0xFF30CF, ION=0xFF18E7
#define ORIGO_FREQUENCY 38400
#define ORIGO_BITS 32
#define ORIGO_HDR_MARK 8800
#define ORIGO_HDR_SPACE 4500
#define ORIGO_BIT_MARK 560 // 495 ~ 826
#define ORIGO_ONE_SPACE 1600
#define ORIGO_ZERO_SPACE 560 //
412 ~ 588
#define ORIGO_RPT_SPACE 2250
#define REPEAT 0xffffffff
|
// ORIGO have a repeat only 4
items long
int ICACHE_FLASH_ATTR
decodeORIGO(void) {
int data = 0;
int offset = 0; // Skip first space
int i;
// Initial mark
if (!MATCH_MARK(results.rawbuf[offset],
ORIGO_HDR_MARK)) {
return 10;
}
offset++;
// Check for repeat
if
(!MATCH_SPACE(results.rawbuf[offset],
ORIGO_HDR_SPACE))
{
results.bits = 0;
results.value = REPEAT;
results.decode_type = NEC;
return 20;
}
// Initial space
if (!MATCH_SPACE(results.rawbuf[offset],
ORIGO_HDR_SPACE)) {
return 30;
}
offset++;
for (i = 0; i < ORIGO_BITS; i++) {
if (!MATCH_MARK(results.rawbuf[offset],
ORIGO_BIT_MARK)) {
return 40;
}
offset++;
if (MATCH_SPACE(results.rawbuf[offset],
ORIGO_ONE_SPACE)) {
data = (data << 1) | 1;
}
else if
(MATCH_SPACE(results.rawbuf[offset], ORIGO_ZERO_SPACE)) {
data <<= 1;
}
else {
return 50;
}
offset++;
}
// Success
results.bits = ORIGO_BITS;
results.value = data;
results.decode_type = ORIGO;
return 51;
}
|
ESP8266 ESP-12F TSOP38 紅外線接收器的波形 |
顯示紅外線的信號數據 |
※ DIY - ESP8266:ESP-12F TSOP38 紅外線接收器模組介紹(七十三)
※ DIY - ESP8266:ESP-12F TSOP38 紅外線接收器電路(七十四)
※ DIY - ESP8266:ESP-12F NEC 紅外線通訊協定(七十五)
※ DIY - ESP8266:ESP-12F 紅外線發射器電路(七十七)
※ DIY - ESP8266:ESP-12F 紅外線發射器程式(七十八)
2018年 3月 15日 天氣報告
氣溫:20.8度 @ 20:10
相對濕度:百分之 83%
天氣:天色大致良好