請問有沒有零件號碼,想做一個。
       謝謝
xo_ox 發表於 2019/6/11 17:52

其實我都係淘寶求其買!

我搵返之前淘的紀錄:
ESP8266
我塊係 WeMos D1。不過如果我再揀的話會搵 WeMos Mini D1,比較細塊,功能又差不多。十幾人仔就有。不淘的話,印象中係鴨街新昌見過,但不記得幾錢。

三腳紅外接器
VS1838B,約兩毫幾人仔/粒。這類接收器,好多廠有出,有不同Model,不同頻率(一般來講用 38kHz 可應付到大大部份用途,如果齋做發射,可以不裝接收器),3 隻腳的次序亦有不同(我買過的都是 Out/Gnd/Vs,但拆舊電器見過有 Out/Vs/Gnd)。鴨街華輝都有,不知 Model no.,要 HK$12/粒!!

IR LED
真係求其到紀錄入面都無 Model no.!

NPN transistor
求其細功率 NPN 都得,我用 9013 係好多年前買落用剩的。

電阻數值
同我係 1# 線路圖差不多就得,識計就自已計下數。

via HKEPC IR Pro 3.5.2 - Android(3.2.0)

TOP

請問有沒有用32bit數目的library
手工填timing 比較麻煩

TOP

本帖最後由 C_Law 於 2019-6-12 07:34 編輯
請問有沒有用32bit數目的library
手工填timing 比較麻煩
xiao 發表於 2019/6/11 23:06


你意思係想入 32bit HEX 數值去做 irplus 的遙控設定檔?

係可以,其實 irplus 除了 RAW 之外,起碼另外有兩種做設定檔方法:
1.針對 NEC protocol,好似以下舊 Post 的有線 FanHUB 設定檔
https://www.hkepc.com/forum/viewthread.php?fid=180&tid=2427054
<device...> 內的format 改用"WINLIRC_NEC1",而<button...>M S M S...</button>的 M S M S...部份改為 HEX 數值,就會做到根據 NEC protocol timing/bit 數的遙控器設定檔。

2.<device ...> 內使用 format="WINLIRC_SPACEENC"
例如將上面個有線 FanHUB 設定檔的 <device ...> 行改寫成:
<device manufacturer="CableTV" model="FanHUB" columns="12" format="WINLIRC_SPACEENC" toggle-bit-pos="0" one-pulse="560" one-space="1690" zero-pulse="560" zero-space="565" header-pulse="9000" header-space="4500" gap-space="39770" gap-pulse="560" bits="16" pre-bits="16">

就可以做到自定 Header/1/0...etc 的 Mark 和 Space 長度。而且不限於 32bit,我不知最長可做到幾多 bit,但我試過整屋企部古董「凶宅」(日立 OEM)冷氣機遙控器,有成一百零幾 bit 都做得到。

WINLIRC_RAW、WINLIRC_NEC1、WINLIRC_SPACEENC 只係三種我整過的 Format。其實還有其它 format,裝 irplus 後用「三」Menu→Add 加入其它內置的設定檔睇下,還會搵到其它 format 的設定檔,可以用「三」menu→Edit 開出來睇下它的寫法。我最初用 irplus 都係開它內置的設定檔睇先至學識整上述三種 format 的設定檔。

Uploaded_via_HKEPC_IR_Pro_Android(5b602).jpg
2019-6-12 07:04


不過,就算用 WINLIRC_RAW 以外的 format,實際使用時,irplus 都係先轉返做 Mark/space pulse length 然後才經 WiFi 送出去。而且收到的數值會同實際數值有出入,例如 NEC Header mark 的 9000,發送出去後,Server 實際收到的數值可能變成 89XX~91XX。我不知實際是怎樣轉,只知道收到的數字一定是 26 倍數(但又未必 Round 去最接近的 26 倍數),而且改 carrier freq. 的話又會變另一個數,即使用 WINLIRC_RAW,Server 收到的數字都同樣係會變。不過這小小偏差,一般電器都仍然可以正確解讀到遙控。

TOP

回覆 13# C_Law


    看來不錯
請問怎樣解決耗電的問題
手機和ESP都費電

TOP

看來不錯
請問怎樣解決耗電的問題
手機和ESP都費電
xiao 發表於 2019/6/12 09:12


電方面我無太在意。

手機方面,反正用遙控的時間多數係睇電視的時候,而平日都係一路睇電視一路拎住部手機篤篤篤,所以用手機做遙控都不會額外用多幾多手機電。

ESP8266 方面,我屋企個廳係搵個舊電腦 ATX 牛長期開著向高清機頂盒、錄電視用的 3.5" HDD、Router...etc 供電(費事插到一大堆火牛),可以係隻 ATX 牛拉條 5V 線向 ESP8266 供電。

除此之外,現在好多電視機/高清機頂盒/山寨 DVD 機之類影音產品都有 USB port,有些就算在所謂「Power Off」的時候(實際上應該叫 Standby),個 USB port 都仍然有電,只要無熄這類電器的插蘇電掣,就長期有 5V 電可以向 ESP8266 供電。

用開有 USB 充電位的拖板又可以向它取電,反正這類拖板十之八九都無掣去開關 USB 火牛,拖板有電,隻牛就有電。

出街用就可以插手機尿袋。

TOP

本帖最後由 C_Law 於 2019-6-22 18:27 編輯

上面 13# 提到,irplus LAN 傳送出去的 Timing 數值會隨著 Carrier frequency 而改變,我發現 Carrier frequency 越大,Server 收到的 Timing 數值亦會變得越大。如果用作紅外線遙控的話,小小 Timing 改變,受控電器一般都能正確解讀到。不過,如果我想將 irplus LAN 借用做其它用途呢?

其實 irplus LAN 可視作一個單向傳送指令的使用介面,由 irplus LAN 發出指令,ESP8266 收到指令就作出相關的工作,例如我想傳個 1 去開燈、傳個 2 去開風扇、傳個 0 就關閉所有電器,這時候,ESP8266 就需要將 irplus LAN 改變了的數值還原才能接收到正確的指令。

假設數值 A 係我心目中想 ESP8266 取得的指令,而 B 係被 irplus LAN 改變後發送出去的數值,我發現可以用以下方式將 B 還原返做 A。

首先製作 WINLIRC_RAW 格式的 irplus LAN 遙控設定檔時,用 100A 取代 <button...>M S M ... M</button> 內的 M S M...M 部份。可以一次過傳送多個數值,總之每個都乘 100。

當 ESP8266 接收到來自 irplus LAN 被改變後的每個 B,即是我原先個 ESP8266IRServer.ino 之內的 void irpluslan() 入面分割 server.arg(1) 的 while loop 內讀取到的 Temp 數值:
  1. float B = (float)Temp;
  2. float fFactor = 100.0;  // 設定檔內每個數值被乘大的倍數
  3. unsigned long C;  // 還原後的數值,計出來應該等如原本的 A
  4. C = (unsigned long)(B * 38461.53846 / (float) Hz / fFactor + 0.5);
複製代碼
 

38461.53846 這個數值是來自 1,000,000/26,因為我見 irplus LAN 傳出去的 Timing 數值必定被改為 26 的倍數,所以我估計 irplus LAN 改變 Timing 數值的方式必定同 26 有關,結果就試出這個數值。

我測試過 Carrier frequency 由 30kHz 到 60 kHz(每 Step 1kHz 的試),A 由 0~255,由 B 還原出來的 C 都等如原本的 A。既然可以正確傳到 1 Byte,即係可以設計任何指令由 irplus LAN 傳給 ESP8266。

fFactor = 100 只係貪方便,也可以其它更大的數值,例如用 256 (方便用 Hex 數值)都應該得,不過我未試過。但不能用太細,我試過用 26,但間中會有些錯。

BTW,我無認真學過 C++,想問下,以上面幾行 Code 內講,幾個 () 內的 unsigned long, float 否可省去。例如第一行,Temp 本身是 long,而 B 被 declare 做 float,是否還需要在 Temp 之前加 (float)。又例如計 C 的一行,入面有float 又有 long 的 variable,我想全部以 float 去計,最後先至變返做 long。

TOP

本帖最後由 xiao 於 2019-6-24 18:33 編輯

回覆 16# C_Law


    IR 一般用 1/3 duty cycle 調製, 同樣時間的長度, 頻率和脈衝數成正比. 如果頻率高了, 脈衝數變大很合理.
所以用RAW CODE, 例如 32 bit 數據來做應該可以避開這種疑問

類似的 subroutine, 一般不會直接寫 TIMING 的細節, 而保持在 PROTOCOL 層面運作, 做起來會比較容易閱讀和維護.
只要單獨寫 TIMING 細節時才考慮調製頻率, 就會大幅減低寫碼難度, 也容易維護修訂.
  1. //----------------------------------------------------------------------------
  2. void NEC_header(){
  3. /*
  4.   __asm
  5.     lda #16
  6.     jsr _NEC_1T_MARK
  7.     dbnza .-3 ; branch to avoe line if Acc>0  
  8.     lda #8
  9.     jsr _NEC_1T_SPACE
  10.     dbnza .-3 ; branch to avoe line if Acc>0
  11.   __endasm;
  12. */
  13.   for (temp=0; temp<16; temp++) {
  14.     NEC_1T_MARK();
  15.   }

  16.   for (temp=0; temp<8; temp++) {
  17.     NEC_1T_SPACE();
  18.   }
  19. }


  20. void NEC_stop(){
  21.   NEC_1T_MARK();
  22.   NEC_1T_SPACE();
  23.   for (temp=0; temp<24; temp++){
  24.     delay1ms();  
  25.   }  
  26. }

  27. void NEC_bit0(){
  28.   NEC_1T_MARK();
  29.   NEC_1T_SPACE();  
  30. }

  31. void NEC_bit1(){
  32.   NEC_1T_MARK();
  33.   NEC_1T_SPACE();
  34.   NEC_1T_SPACE();
  35.   NEC_1T_SPACE();
  36. }
  37. //----------------------------------------------------------------------------
複製代碼

TOP

本帖最後由 C_Law 於 2019-6-24 22:35 編輯

回覆 17# xiao

我試過用同一個 NEC 訊號,以不同 format 去做遙控設定檔,結果是:

WINLIRC_NEC1
這 IR Server 發出的訊號,由另一個三腳接收器讀取,無論在 irplus LAN 入面怎麼改 Carrier frequency,讀取到的 Timing 都好接近 NEC 的預設值(Header=9000/4500、One=1690/560、Zero=560/560...etc)。

WINLIRC_SPACEENC
填 NEC 的預設數值入去設定檔,就算 Carrier frequency 用預設的 38kHz,讀到的 Timing 都細過正確的 NEC 數值,讀到的 Waveform 係比正常 NEC Waveform 縮窄了。要用類似 16# 的計算方式事先改數值,寫設定檔時要將數值改大(變成 Header=9109/4555、One=1711/567、Zero=567/567),發射出來的實際 Timing 先至係會係 NEC 的預設值。不過,想改 Carrier frequency 的話,又要再計過數先至會發射到正確的 Timing, Carrier frequency 加大,Timing 也變大,讀的的 Waveform 會拉闊了;相反,減 Carrier frequency,Timing 也減小,讀的的 Waveform 會縮窄。

WINLIRC_RAW
將 NEC 的 32-bit Hex code 轉返做 Timing 寫入設定檔,結果會同 WINLIRC_SPACEENC 一樣。

應該係 irplus LAN 問題。

最麻煩係,無論用什麼 Format 的設定檔,irplus LAN 始終係轉為 http://ip-address:portNo/?carrier=Hz&code=M+S+M+...M 的格式傳送出去。Server 只會收到 Carrier frequency 和一堆 Timing 數值,根本不知原本是什麼 Format 的設定檔,不知要不要再改 Timing(原本係 NEC 格式設定檔就不用改,SPACEENC 和 RAW 的都要改。況且 irplus LAN 可能重有其他設定檔格式,都不知要不要改)。

TOP

回覆  xiao

我試過用同一個 NEC 訊號,以不同 format 去做遙控設定檔,結果是:

WINLIRC_NEC1
這 IR Ser ...
C_Law 發表於 2019-6-24 22:33


這種誤差時間1.3%, 通常很多機器都可以的, 但是有些超過0.3%就會失敗, 例如遇到過的 MAGIC TV 在 0.2% 才正常.

要改正人家的 library, 很大工程, 除非慢慢看慢慢試驗. 問題應該是類似用了浮點數, 截斷轉換, 軟件延時等

https://github.com/markszabo/IRr ... ster/src/IRsend.cpp
有關 delay, modulation

TOP

本帖最後由 C_Law 於 2019-7-14 22:56 編輯

終於得閒整返個實際放係廳長用的 IR Server(之前一直搭 Breadboard 用住先 )。

用兩粒 IR LED 分別指去不同方向,Forward current 大約 100mA。遙控距離足夠大部份香港人家居用途。用作指示用途的 LED 用返塊 WeMos D1 的 Onboard LED,無再額外加 LED 做指示燈。WeMos D1 連埋我塊萬用板裝入個半透明膠盒仔,再搵個手機架夾住個盒,校好 IR LED 發射角度向正一堆受控電器。

ESP8266 IR Server2.gif
2019-7-14 22:33


HW-1.jpg
2019-7-14 22:33


HW-3.jpg
2019-7-14 22:33


紅線係塊萬用板背面的連線。塊板開返個大窿方便睇到塊 WeMos D1 的 Onboard LED。
HW-2.jpg
2019-7-14 22:33

TOP