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%
天氣:天色大致良好

2018年3月14日 星期三

DIY - ESP8266:ESP-12F NEC 紅外線通訊協定(七十五)

DIY - ESP8266:ESP-12F NEC 紅外線通訊協定(七十五):

雖然 ESP-12F TSOP38 紅外線接收器電路是很簡單,但程式相對是複雜,原因是每家廠商都有其一套專屬的紅外線通訊協定(Protocol),所以每家廠商的遙控器都是自家的產品,主要知名的廠商有NEC、SONY、Philips 的 RC5 和 RC6、Toshiba、Sharp 等等,都有自家的紅外線協定。

NEC 紅外線通訊協定波型
一般最常用的是 NEC 紅外線通訊協定(Protocol),NEC 紅外線通訊協定(Protocol)使用調變技術(Pulse Distance Encoding),筆者的 Origo 和 Gadmei 遙控器都是用 NEC 紅外線通訊協定,所以筆者是針對 NEC 紅外線通訊協定作程式。
 
Origo 遙控器
NEC 紅外線通訊協定(NEC Infrared Protocol)特性:
  1. 開始是 9ms 的前導脈衝 /引導碼(Leading Pulse Burst)16倍的前導脈衝用作邏輯數據位的脈衝
  2. 跟隨 4.5ms 的空間
  3. 接收設備的 8位地址(Address)
  4. 地址的 8位邏輯反轉(Address Inverse)
  5. 8位命令(Command) 該命令的
  6. 8位邏輯反轉(Command Inverse)
  7. 最後的 562.5μs 脈衝突發顯示傳輸結束。
NEC 紅外線通訊協定(NEC Infrared Protocol)(圖片來源:互聯網)
Bit Timing :
562.5µs 載波與 1.6875ms Space 組成共 2.25ms 長的波型代表位元 "1" = Logic ‘1’
562.5µs 載波與 562.5µs Space 組成波型共 1.125ms 長的波型代表位元 "0" = Logic ‘0’

NEC 紅外線通訊協定 位元 "1" 和位元 "0" 的波型圖(圖片來源:互聯網)
16bits 地址(Address + Inverse)需要 27ms,16bits 指令(Command + Inverse)需要 27ms,因為地址(Address + Address Inverse)或指令(Command + Command Inverse)常常包括 8個 0 和 8個 1,所以時間長度為 (8 * 1.125ms) + (8 * 2.25ms) == 27 ms,總時間長度為 (9ms + 4.5ms + 27ms + 27ms) = 67.5 ms。

NEC 紅外線通訊協定(NEC Infrared Protocol)(圖片來源:互聯網)
相關網址:
※ DIY - ESP8266:ESP-12F TSOP38 紅外線接收器模組介紹(七十三)
※ DIY - ESP8266:ESP-12F TSOP38 紅外線接收器電路(七十四)
※ DIY - ESP8266:ESP-12F TSOP38 紅外線接收器程式(七十六)
※ DIY - ESP8266:ESP-12F 紅外線發射器電路(七十七)
※ DIY - ESP8266:ESP-12F 紅外線發射器程式(七十八)

2018年 3月 14日 天氣報告
氣溫:19.7@ 19:40
相對濕度:百分之 81%
天氣:微雨

2018年3月13日 星期二

DIY - ESP8266:ESP-12F TSOP38 紅外線接收器電路(七十四)

DIY - ESP8266:ESP-12F TSOP38 紅外線接收器電路(七十四):

ESP-12F TSOP38 紅外線接收器電路是很簡單,因為 TSOP38 紅外線接收器模組(Infrared Receiver Module)已經內置光電探測器和前置放大電路,衹要接上電源(Vcc +3.3V 和 Ground),輸出腳接到 ESP-12F 的 I/O GPIO2(D4) 便可以了,主要的解碼工作,會放在軟件上來處理。

ESP-12F TSOP38 紅外線接收器電路圖
首先準備所需的電子零件,包括尺寸 40mm × 60mm × 1.6mm 雙面 PCB 洞洞板、ESP-12E 的轉接板、2×10 2.54mm 間距板對板連接器、1×4 2.54mm 間距 90度彎排針、1×8 2.54mm 間距排針和 TSOP38 紅外線接收器模塊,然後根據電路圖銲接。
 
DIY - ESP8266:ESP-12F TSOP38 紅外線接收器電路(七十四):
ESP8266 ESP-12F TSOP38 紅外線接收器模塊連接:
IR
Signal
Description
ESP-12F
Board Signal
I/O Signal
1
VCC
VCC 2.5 ~ 5.0V
8
Vcc
Vcc
2
GND
Ground
15
GND
GND
3
OUT
Signal Output
19
D4
GPIO2

TSOP38 紅外線接收器模塊
銲接完成後的 PCB 背面
銲接完成後的 PCB 正面
組裝完成後的 PCB 背面
組裝完成後的 PCB 正面
相關網址:
※ DIY - ESP8266:ESP-12F TSOP38 紅外線接收器模組介紹(七十三)
※ DIY - ESP8266:ESP-12F NEC 紅外線通訊協定(七十五)
※ DIY - ESP8266:ESP-12F TSOP38 紅外線接收器程式(七十六)
※ DIY - ESP8266:ESP-12F 紅外線發射器電路(七十七)
※ DIY - ESP8266:ESP-12F 紅外線發射器程式(七十八)

2018年 3月 13日 天氣報告
氣溫:21.7@ 20:00
相對濕度:百分之 78%
天氣:大致多雲

2018年3月12日 星期一

DIY - ESP8266:ESP-12F TSOP38 紅外線接收器模組介紹(七十三)

DIY - ESP8266:ESP-12F TSOP38 紅外線接收器模組介紹(七十三):

紅外線(Infrared,簡稱:IR)是一種為非可見光,波長介乎微波與可見光之間的電磁波。紅外線波長在 700nm(700奈米 / 430 THz)至 1mm(1毫米 / 300 GHz)之間,在室溫下物體所發出的熱輻射多都在此波段。紅外線通常會被區分成不同波長的區段,一般使用者分類為:近紅外線(Near-infrared / 0.75–1.4 µm)、短波長紅外線(Short-wavelength infrared / 1.4–3 µm)、中長波紅外線(Mid-wavelength infrared / 3–8 µm)、長波紅外線(Long-wavelength infrared / 8–15 µm)、遠紅外線(Far infrared / 15–1000 µm)。紅外線在不同材料上的反射與吸收方式不同於一般可見光,紅外線對部分材料有穿透能力,因此,透過紅外線感光設備與紅外線濾鏡進行拍攝,其拍攝畫面對比強烈,效果有別於常見的彩色或是黑色拍攝模式。紅外線雖不被人的肉眼所察覺,但是在日常生活環境是無所不在,如在重要場所中提供24小時不間斷視訊監控。

電磁波的波譜與性質(圖片來源:維基百科)
紅外線接收器(Infrared Receiver)有很多封裝和規格,筆者從 Origo 31A002 Twister Tower Fan(直立式風扇電子控制板)拆除出來的紅外線接收器模組(Infrared Receiver Module)是 TSOP38 封裝,編號是 38B 6.616,TSOP38 紅外線接收器模組內置光電探測器和前置放大電路,採用環氧樹脂封裝,模組用作支援更高 PCM 頻率的紅外線濾波器。目前可提供三種符合業界標準的管腳配置,最小輻照度為 0.1mW/m2 和 0.15mW/m2。TSOP38 紅外線接收器共有 3腳(Vcc、GND 和輸出腳),供電電 2.5V 至 5.5V 運作,傳輸範圍為 45米。模組的載波頻率範圍為 30kHz 至 56kHz,具有較低的電源電流(0.35mA)。

紅外線接收器(Infrared Receiver)的不同封裝和規格
TSOP38 封裝紅外線接收器(Infrared Receiver)的正面
TSOP38 封裝紅外線接收器(Infrared Receiver)的背面
TSOP38 封裝紅外線接收器(Infrared Receiver)的腳定義
TSOP38 封裝紅外線接收器(Infrared Receiver)的內部框圖
TSOP38 封裝紅外線接收器(Infrared Receiver)的電路
參考 Visay IR Receiver Modules for Remote Control Systems TSOP38x Features:
  • Very low supply current
  • Photo detector and preamplifier in one package
  • Internal filter for PCM frequency
  • Improved shielding against EMI
  • Supply voltage:2.5 V to 5.5 V
  • Improved immunity against ambient light
  • Insensitive to supply voltage ripple and noise
  • Carrier Frequency:30kHz、33kHz、36kHz、38kHz、40kHz、56kHz
  • Component in accordance to RoHS 2002/95/EC and WEEE 2002/96/EC
氣溫:20.5@ 19:10
相對濕度:百分之 70%
天氣:天色大致良好