2023-10-27

UV-K5 firmware資訊更新

使用了一段時間之後,在收接飛航通訊方面效果最好的是使用
https://github.com/egzumer/uv-k5-firmware-custom
這個github的firmware,它針對AM mode改良,所以聽起來不輸Uniden的scanner.

它包括spectrum功能,可以開啟頻譜模式來掃描飛航通訊,而且可以用到12.8MHz寬的範圍來掃描。

 

 按F以及5啟動頻譜模式,以截圖中的掃描來說,凸出來這一支訊號就是128.5MHz, 所謂12.8MHz寬,是在頻譜模式按4切換成128,再按1(7減少)增加到100.00k,最左端是118.1MHz最右端是130.9MHz。這個範圍掃描時會停在ATIS,因為它是不間斷發射(RCSS ATIS=127.4),所以按一下PTT下方的第一個按鍵Fn1,會把這個頻率列為不接收,下一輪掃到這裡就跳過,如果你所在環境還有其他強雜訊,使得掃描時停在那個訊號,就按一下Fn1來跳過。

 這裡說切換為100.00k是因為幾乎全部的通訊都落在小數後一位,即NNN.M,例如127.4 118.1 125.5 119.7 128.5,除了131.95外都適用。

 幾個重要按鍵:
1/7 增減掃描頻率間隔
4 掃描總數(循環改變)
2/8 增減掃描時改變頻率的間隔(按上/下鍵來改變頻率)
5 直接輸入你要起始的頻率(用*來輸入小數點)
3/9 改變收聽訊號的dB值
6 收聽頻率的頻寬
0 切換FM/AM/SSB
F/# 改變squelch線的高低
Fn1(PTT下面第一個鍵) 把出現的頻率列為跳過
Fn2(PTT下面第二個鍵) 頻譜掃描中,按Fn2可以切換背光
PTT 可以停在掃到的頻率

 從頻譜掃描來找出會出現的頻率,然後把頻率寫入記憶,常態收聽時切換到記憶模式(非VFO模式),按*鍵啟動記憶掃描。

 記憶掃描途中可以長按*鍵來切換 I 跟 II 兩個群組或是不分群組全部掃描
在非掃描時的記憶頻率,按5可以把這個頻率切換為第I或第II群組,或不屬群組.

 

 這是非掃描時的畫面,同時顯示兩個記憶頻道名稱及頻率,目前收到的是119.7000

 如果不想用web界面的方式燒錄(在Linux只能用chrome,不能用firefox),可以用k5prog這個工具,它已經修正bug,可以正常使用(之前版本會在半途中斷無法完成)。
https://github.com/sq5bpf/k5prog
在使用k5prog燒錄之前,要把下載來的bin或自己compile出來的bin拆解開,工具是這一支程式 https://github.com/amnemonic/Quansheng_UV-K5_Firmware/blob/main/uvmod_kitchen/qsfirm.py

 進入燒錄模式的按鍵是
1.先關機,插入連接線(3.5mm/2.5mm耳機接頭)
2.按住PTT不放,開電源,這時螢幕無顯示,照明用LED必須亮起來

執行方式如以下這一行
qsfirm.py unpack abc-xyz.bin k5flash.bin abc-xyz_ver.bin
"unpack" 這個就是拆解出給k5prog燒錄的格式
abc-xyz.bin 就是下載來或自行compile出來的bin檔
abc-xyz_ver.bin 只是看看它是什麼版本用的,與燒錄無關
k5flash.bin 是要交給 k5prog 燒錄用的格式檔bin,然後開始燒錄

k5prog -b k5flash.bin -YYYYY -F
這裡一定要加 -YYYYY -F
開始它會列出一些資訊,其中包括firmware的大小:
Writing blocks from address 0x0 until 0xf000, firmware size is 0xefec
然後看它的最後一行是不是 0xef00 跟 0x00ec
*** FLASH at 0xef00 length 0x00ec  result=1
這樣就表示全部燒錄完成了

記憶頻道的管理要用chirp, 請找next裡新的版本才有支援UV-K5機種
https://trac.chirp.danplanet.com/chirp_next/

2023-09-18

UV-K5可以DIY firmware的無線電

 之前玩過DM-1801自行燒OpenGD-77 firmware,最近又有一支新手機UV-K5,一樣可以自行燒firmware(不是燒OpenGD-77). 網路上已經有多種firmware以及附加功能,覺得最有用的應該算「Advanced Spectrum(頻譜掃描)」,原廠firmware的掃描只能看到頻率數字,這個增加的Spectrum可以開到3.2MHz頻寬 可以達到12.8MHz 寬度來掃描(比RTL-SDR的2.4MHz還寬)進行掃描,看著範圍內的出現訊號,並能聽到被掃到的頻率通訊內容。(OpenGD-77的掃描在進行時,是無法聽到訊通內容的,但UV-K5的firmware可以聽。)

這些公開的firmware可以打開全部頻寬,從18到1300MHz,不過受限於BK4819本身的限制,中間有一小段620到840 MHz是無法工作的。它可以收聽AM通訊,像是飛航管制等等(不是一般中波AM廣播),也能聽一般FM廣播,就是包括日本跟台灣的範圍,76到108MHz這一段的wide FM,以及包括SATCOM衛星電話的243-270MHz。

不過它的AM效果不很理想,就是聽起來有些背景雜訊,以RCSS ATIS為例,127.4有些雜訊,但341.0就很清晰,這幾天在Telegram UV-K5群組裡看到有人利用改register的辦法,也能聽SSB(LSB/USB)!

網路上看到有人說加一個100nF(104)的電容跨在喇叭的兩個端子,可以改善音質,但我實際拆機DIY焊上去之後,覺得音效沒有明顯變化。據說UV-K6的喇叭仍然跟K5用同一個型號,只是加了一粒電容。

在Linux環境原本只能透過wine比官方的燒錄軟體,現在已經有web介面的方法,不管是在Linux或Windows環境都是只用瀏覽器(Chrome)就能燒firmware,當然你要有一條連接UV-K5跟電腦的cable,它的腳位跟Kenwood的cable是一樣的,當然也可以自行DIY。
3.5mm耳機插頭中段跟尖端都沒接,只用到根部RX,要接到USB-TTL(例如FTDI/PL2303…等等)的TX
2.5mm耳機插頭的根部是GND,中段是TX,要接到USB-TTL的RX,尖端沒接
Web介面的燒錄在這裡
https://github.com/whosmatt/uvmod
https://github.com/RE3CON/UVMOD-Enhanced
解開打包後,cd到它的目錄,執行
python3 -m http.server 8000
打開Chrome瀏覽器(firefox可以看,沒辦法燒)
http://localhost:8000
一項一項的勾選你要的功能,最後不能大於大於61439 bytes,再按Patch firmware,然後按Flash directly,就開始燒你選的firmware.

要注意的是,在不該發射的頻率工作,除了自身電氣迴路可能受損,它的溢出波也會很多,會造成週圍的干擾,另外在群組裡看到是這支手機的發射功率不佳,所以建議就拿它當一台寬頻純接收機來現就好。

一台才二十幾美元(台灣露天賣699台元),光是拿來當有頻譜功能的接收機,它的C/P值已經爆表了!

2023-08-30

Live Cam 不出門小旅遊

Live cam顧名思意就是24小時不間斷的拍攝並播放現場畫面,Youtube上面有很多Live cam, 從北半球到南半球,從西伯利亞到美洲,當然台灣也有,包括交通部觀光局、水利署、縣市政府為了推廣觀光、河川監視、路況監視,把很多影像放上Youtube任你看。

Live cam包括風景的、街道的、生態的、商店的……可以看人、動物、天氣…,可以看天氣實況、看街道現況,或商店的Live cam可以觀察人的活動,東京的歌舞伎町、大阪道頓堀、便當店、咖非店、宜蘭外澳飛行傘、LA的海邊人行道、紐約港、時代廣場、俄羅斯聖彼得堡、貝加爾不遠處的城市…專拍野生動動的、酒吧的…很多有趣的實景。

白天可以看,晚上也可以看,「晚上」可以分兩種
一、台灣的晚上,看其他還有日照下的Live cam
二、台灣的晚上,仍然看台灣晚間的Live cam

台灣晚間的Live cam要看什麼?

之前有一支「士林夜市」Live cam, 不過大概在七月底就終止拍攝了。Live cam消失有時只是換了連結,再從Youtube找一下就能再觀看,不過「士林夜市」這支就從此消失了。

像街道、公園會有人出入活動,可以觀察人跟行為,有時會出現有趣的情境。

Live cam看夜空,不過國內大部份Live cam到了晚上是不會轉動的,只有白天才會變換拍攝角度。於是,可以事先記住晚上鏡頭對著夜空的Live cam的角度, 來進行星空觀察。

Live cam的CCD因為長時間對著夜空,比我們肉眼能見的星等更多、更亮,但是天空的星星不像星圖裡有線連接,標示出是屬於哪個星座,所以第一步是找出方向,能確定東西南北才能對照星圖(星座圖),也就是在白天藉著日光跟時間,先瞭解拍攝畫面的東西南北,到了夜晚看Live cam便能找出對應的星座。

在Linux環境最簡單方便的天球程式,推薦hnsky, 你要zoom in/out 來讓Live cam的星點距離與星圖(hnsky)裡的星點距離一樣(或至少是差不多比例),才能容易分辨出是哪個星,當然這要有一點點天文常識。

在Linux環境可以利用像是mpv這樣的影音播放軟體來觀看Youtube, 可以寫一個小的資料檔把各個Youtube連結存成單一檔(例如cvs格式),再例用python來讀取指定的連結,然後丟給mpv播放,完全不必用到瀏覽器,原因之一是用瀏覽器觀看效率不如影音播放器,又會看到廣告。

從Live Cam裡發現美國人也騎摩托車,指的不是電影裡常見那種重型機車,而是跟台灣人常騎的摩托車一樣,而且也有兩個人騎一輛摩托車,這是從Florida最南邊的島上一支街道Live Cam看到的。

2023-05-31

台灣薪資、房價

台灣薪資與房價的落差已經是眾人階知的嚴重社會問題,可以說它會讓台灣人口更加速老化,國力更加速衰退,因為年輕人買了房子之後,就被房貸綁住數十年。

到目前為止,沒有任何政治人物願意出手處理這個國安問題,誰出手誰就可能失去政權,因為政治人物本身也是高房價的既得利益者,加上選舉需要大把鈔票,而政治人物背後重要金主,階是高房價的既得利益者,沒有哪一黨敢去得罪金主。

以為世界發展到廿一世紀了,已開發國家是不可能施行奴隸制,但台灣社會呈現的明明就是『新奴隸制』。古代的奴隸是被鐵鍊綁起來,現在廿一世紀的新制奴隸是被房貸綁起來,看起來確實比古代文明,只差沒用到鐵鍊。

https://zhong1016.github.io/software-salaries/

我也是這產業的工作者,確定這是一份俱有參考價值的台灣軟體工作者薪資狀況。比對各公司的薪資與台灣都市房價,以年收入120萬來算,已經是這產業裡不錯的,然而基本上還是要不吃不喝二十年,才能在台北市買一戶二十幾坪的老舊國宅,台中、高雄可能也好不到哪裡去。

以洛杉磯downtown的房價來說,三十幾或四十坪面積,雙房雙衛(美國沒標示『幾廳』)的公寓(condo),大約六七十萬美元,如果是德州EL PASO downtown的房價,只要二十幾萬美元就能買到一戶有院子的房子(house),這些房子的居住品質,都比台北老舊公寓好很多。

然而從上面表列,看一下美商公司給台灣員工的薪資,一樣是不吃不喝的話,只要十年就能買一戶LA downtown的公寓, 三年就能買一戶德州EL PASO downtown的house了(其實美商同樣級職,美國員工的薪資大約是台灣員工的兩倍,所以買房的時間更減短一半)。

這樣的事實,還有人不承認台灣新奴隸制嗎?敢說台灣物價便宜、生活費便宜嗎?有逛過美國Costco的人,應該也會嘆息台灣物價貴、薪資低這個醜陋的問題吧?

2023-04-30

披著反戰羊皮的反美偽君子

 一直以來,總有著民族主義者,以反美為職志。不久前法國總統馬克宏吹起反美的小喇叭,以為不要跟美國合作,就能展現法國的偉大!

另一位反美代表人物,前南韓總統文在寅,也曾倡說反美才能和平,最近台灣也有人揮舞著反美旗幟,這些人共通的手法,都是披著「反戰」的羊皮來鼓動「反美」。

為什麼這邦人要反美?除了說他們內心的民族自卑感作祟之外,沒有更好的理由了。民族自卑感讓這邦人不斷吹噓自己的民族有多麼偉大,可是一旦打開歷史,就會令他心虛,因為歷史上呈現的,正是這邦民族主義者的無知與無能!

回顧史實,如果沒有美國介入韓戰,南韓早就被金正恩腳踩在你們頭上,哪還有青瓦台可以讓文在寅當總統?

二戰期間,如果美國沒有介入歐洲戰場,如果美國沒有介入亞太戰場,現在的歐洲就是納粹德國的版圖,亞洲就是當年的大日本帝國在統治,哪裡還有「法國」?哪裡還有你們心向的「祖國」?別跟我說什麼法國人多麼英勇抗敵、什麼中國人八年抗戰那些鬼話了!

美國固然是為了美國的利益而介入歐洲戰場、太平洋戰場,但其結果就是拯救了那些民族主義的廢物。

現代國家是以良好的制度做為國民凝聚力,落後國家或原始部落才會強調民族、血緣來做為凝聚力。無知、無能導致自卑的民族主義者不斷高喊「民族」二字來洗腦人民,叫大家忘了糟糕、腐敗的制度,讓特權者吃香喝辣、讓獨裁者高枕無憂。

當台灣正被外敵欺壓的時刻,你們不去指責那個窮兵黷武、日思夜想侵略台灣的惡龍,反倒披起「反戰」的羊皮來反美,你們的反戰,就是在營造「趕走警察,就不會有黑道來威脅。」這種顛倒是非的邏輯,企圖讓台灣孤立無援。

只要翻開歷史,你們這些披著「反戰羊皮」的民族主義偽君子,就原形畢露了。

2023-03-31

pico解譯各種紅外線訊號

利用Raspberry Pi Pico + Adafruit 的 IR remote library 來做個泛用型紅外線接收器,插到電腦的USB就可以用來遙控任何電腦。

https://github.com/adafruit/Adafruit_CircuitPython_IRRemote

只需要 copy adafruit_irremote.py 放到 pico 的lib/ 目錄下面即可

這裡所謂泛用是說,因為同樣是按數字「2」,但不同遙控器發射出來的訊號卻不一樣。任何市面上有的紅外線遙控器,像是控制電視、播放機、機上盒、DVD機、選台器,甚至市售萬用型紅外線遙控器也是,都可以拿來做為遙控pico用。

IR receiver 有三支腳,接到pico的GPIO腳,一支接3V3 一支接GND 一支接任何GPIO, 然後把GPIO腳的GPXX 代入 pulsein 裡,這裡以GP18為例。

import board, pulseio, adafruit_irremote
pulsein = pulseio.PulseIn(board.GP18, maxlen=128, idle_state=True)

def draw():
  decoder = adafruit_irremote.GenericDecode()
  while True:
    try:
      pulses = decoder.read_pulses(pulsein)
      code = decoder.decode_bits(pulses)
      pulses.clear()
      print(code)
    except Exception as ex:
      print(str(ex))

然後從電腦用 pyserial-miniterm /dev/ttyACM0 115200 --raw 指令就可以連上pico, 來看你用的紅外線遙控器發射什麼訊號碼?

大部份解出來的都有四組數字,以我手上的幾支發射器,解出來像是
(255, 0, 183, 72)
(255, 0, 191, 64)
(255, 0, 199, 56)
或是
(49, 107, 69, 186)
(49, 107, 203, 52)
(49, 107, 163, 92)
或是
(158, 41, 15, 240)
(158, 41, 159, 96)
(158, 41, 191, 64)
或是
(191, 191, 167, 88)
(191, 191, 143, 112)
(191, 191, 39, 216)
但也有只發射兩組數字的,像是
(29, 191)
(29, 79)
(29, 207)
(這種是市售的一種包含USB接收器的遙控組,一組一百多台幣)
以四組碼的來說,前兩碼是固定,可以用第三碼來辨識發射的是哪個鍵
而兩組訊號碼的,第一碼是固定,可以用第二碼來辨識發射的是哪個鍵

知道這些訊號碼之後,就可以搭配像是Adafruit HID linbrary 來模擬鍵盤或老鼠來控制電腦,或單純從serial port送按鍵碼給電腦來做操控。

https://github.com/adafruit/Adafruit_CircuitPython_HID

較早的版本有分給circuitpython 7 或 8 版用,現在都用 8 所以只有一個目錄
adafruit_hid
把整個目錄copy到pico lib/ 下面即可使用。
例如:

elif code[2] == 63:
    kbd.send(Keycode.CONTROL, Keycode.W)
    如果第三碼是 63 就按下 Ctrl 跟 w 關閉分頁
 

elif code[2] == 123:
    kbd.send(Keycode.CONTROL, Keycode.SHIFT, Keycode.EQUALS)
    如果第三碼是123就按下Ctrl 跟 + 放大(zoom in)

2023-02-26

Circuitpython IR receiver 的問題

朋友送我一台ARM SBC(ESPRESSObin) 上面雖然有GPIO腳,但是用 Armbian_22.11.1_Espressobin_jammy_current_5.15.80.img.xz (https://www.armbian.com/espressobin/), 它的kernel config的 Remote Controller 沒有enable GPIO IR remote control, 所以就算在GPIO 上面插了 IR receiver(三支腳, VCC, GND, Signal), 但是在
/sys/class/rc/
下面是沒有任何東西出現, 所以無法使用 ir-keytables 來讀取紅外線訊號,除非去下載kernel source重新compile一個kernel,不過這比較麻煩。

正好手邊有便宜好用的Paspberry Pi pico, 把IR receiver 插在pico 就可以接收紅外線訊號,通過serial port可以傳送給ESPRESSObin 就能用網樂通的遙控器來控制了。

原本在Pi pico上面用的是circuitpython (https://circuitpython.org/downloads ), circuitpython 比micropython 好用的是它不必藉由其他editor, 只要把寫好的 python script copy 到 pico 裡面(它對任何電腦來說就是一個USB storage 隨身碟一樣) 或是直接用任何editor 在 USB storage上面編寫/修改,就能執行程式(主程式名為code.py)了。

但是問題發生了!遙控器按了幾下,pico那邊才有反應,漏失率大約在20%到30%之間,這樣是很不好用的,所以進行debug, 從code.py 到adfruit_irremote.py(https://github.com/adafruit/Adafruit_CircuitPython_IRRemote) 改來改去,甚至換了硬體(三支腳的IR接收器、發射的搖控器),但是結果都一樣, 訊號漏失還是一樣高比率。

有一天看到reddit上面有人也是用pico 來接IR receiver, 他提到沒用過7.x.x版的,而是一開始就用8.x.x版的circuitpython, (我手上的pico已經很久了,一開始就是裝7.x.x 一直沒換),所以就試試看換一下版本。

沒想到換了8.x.x 版之後,漏訊號的問題消失了!網樂通遙控器發射的訊號差不多是100%都正確反應!

這個Raspberry Pi pico既然能透過serial 送紅外線訊號給ESPRESSObin, 那就可以送訊號給一般沒有GPIO設備的x86 電腦,如果只是要玩紅外線接收,也就是pico上面只焊一支IR receiver, 這樣pico 體積就覺得很大,後來找到同樣是用RP2040 MCU的Waveshare RP2040-zero, 體積不到pico 的一半,一樣有circuitpython的支援(https://circuitpython.org/board/waveshare_rp2040_zero/),在露天拍賣的價格也跟pico大約相同,在台幣160元左右(未焊針腳, 2023年2月的價格)。如果是只當IR receiver用,不要針腳的比較方便自行焊上IR元件。

不過RP2040-zero板上的LED 跟Pi pico不同,pico是用一粒傳統LED,RP2040-zero用的是Neopixel RGB LED, 這個要用adafruit的library才方便控制, 可以從這裡下載:
https://github.com/adafruit/Adafruit_CircuitPython_NeoPixel
跟adafruit_irremote.py 一樣要放在 lib/ 下面。

開頭可以這樣寫:
import board, neopixel
led = neopixel.NeoPixel(board.NEOPIXEL, 1)
led[0] = (64,16,0) <--這是RGB的比率
led.brightness = 0.02

NeoPixel 可以接好幾十個,可以指定led[0], led[1], led[2]....用不同顏色
關於RGB的顏色,我拿到的兩支RP2040-zero 一支是 RGB, 另一支是 GRB, 要試一下看看,才好定義 led[N] = (R, G, B) 或 (G, R, B)的比率。