2018年3月15日 星期四

DIY - ESP8266:ESP-12F TSOP38 紅外線接收器程式(七十六)

DIY - ESP8266:ESP-12F TSOP38 紅外線接收器程式(七十六):

ESP-12F TSOP38 紅外線接收器(Infrared Receiver)程式是根據 NEC 紅外線通訊協定(Infrared Receiver Protocol)來編寫,但是筆者是使用 Origo 遙控器來測試 NEC 紅外線通訊協定,主要是在紅外線解碼上,要拆出 Mark 和 Space 的時間長度,對應 Origo 的紅外線通訊協定標準,完成後將資料顯示在 OLED 顯示屏上。

ESP8266 ESP-12F TSOP38 紅外線接收器
用 DSO 來讀取 ESP8266 ESP-12F TSOP38 紅外線接收器的信號
ESP8266 ESP-12F TSOP38 紅外線接收器初始化程式(user_main.c):
// 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

ESP8266 ESP-12F TSOP38 紅外線接收器解碼程式(IRremote.c):
// 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%
天氣:天色大致良好

沒有留言:

張貼留言