2015-12-31

LINE for Linux

使用LINE 交談是不得已,這麼說,是因為LINE 不願意提供給 Open source free software
社群一個有效的方便使用環境,但是台灣太多人用LINE,不用就不方便。

之前有人以反向工法解譯出可以用 Python 來傳送LINE 交談的方法,但是
不久 LINE公司就發文威脅該作者,那段程式碼便被移出網路不能公開了。

為了在 Linux 下使用 LINE,我試過以 wine 跑 LINE for Windows 或是
跑 kvm qemu 跑一個 Windows 來執行 LINE for Windows, 結果都有
使用上的不方便。

最後,發現 LINE 有 for chromium browser 的plugin, 於是試用了一下,
發現這是在幾種 Linux 環境下 LINE 不好用的方式裡
「最不會不好用」的方式,於是就這樣「不得已」的在 Linux 環境下
使用起 LINE 來,也推薦給使用 Linux 並且要用 LINE 的朋友用。

簡單講就是:
1. 安裝 chromium-browser (在Linux 環境)
2. 在chromium-browser 裡安裝 LINE app plugin
之後並不須要開啟 chromium-browser 而是把以下這段指令寫在某個
可供開啟的地方,例如 fluxbox 的 menu 裡:
"chromium-browser --app-id=menkifleemblimdogmoihpfopnplikde"
然後就可以在 Linux 圖型介面環境下啟用 LINE 了。
或者說,在任何 terminal 裡執行上面那段指令,就會啟用 LINE。

MK802 telegram + ESP8266 自動控制

由於ESP8266 本身俱有網路功能,只要有wifi 就能簡單建構起來。
這裡使用文字介面的 telegram-cli 加 esp8266(執行 telnetd service)。

利用 telegram-cli 當載具,可以接收來自地表各處給的指令(中國除外)、
向OS(Linux) 送出指令,介面由 python 組成(在我五月寫的 Telegram 機器人
那一篇有說明,用一台小小 的 MK802 (或Raspberry Pi)就可以達成。

MK802 到ESP8266 的介面也是藉由 python 來達成
ESP8266 用nodemcu 跑 telnetd service

與ESP8266 互動的部份:
espc = pexpect.spawn('telnet %s 23'%esp8266_IP)
--以下sendline() 內容可以改成任何指令
espc.sendline('gpio.mode(%s,gpio.OUTPUT)'%pin)
espc.expect('> ')
--取得執行後的資訊
espMSG=espc.before
print(espMSG)

ESP8266 執行 telnetd service 的部份:
s=net.createServer(net.TCP,180)
s:listen(23,function(c)
  function s_output(str)
    if(c~=nil) then c:send(str) end
  end
  node.output(s_output, 0)
  c:on("receive",function(c,l)
    node.input(l)
  end)
  c:on("disconnection",function(c)
    node.output(nil)
  end)
  print(" >> DE BV1AL <<")
end)
 
2015年要結束了,最後一天來灌點水! 

2015-12-03

ESP8266 多功能按鍵 2

前面那個按鍵的做法是在等待 1.1 秒之後,計算按了幾下,來執行對應的動作。
這個方式的缺點是定死了時間,所以最多也只能按大約四下,如果把等待的時間
延長,對於只按一下(或兩下)卻要等很久,所以不理想。

改成按了按鍵後,每 0.35 秒去檢查一次看看按鍵次數有沒有增加,如果增加,
就繼續等待,如果沒有增加,才去執行累計出來按鍵次數所對應的動作,這樣
既不必等很久,又可以很彈性的可以加入各種不同按鍵次數的動作。

old_b=0
function btcheck()
  if b == 0 then
    tmr.alarm(4,350,1, function()
      if old_b ~= b then
        old_b=b
      else
        buttdo()  
        b,old_b=0,0
        tmr.stop(4)
      end
    end)
  end
end  
這樣就好用多了!

2015-11-08

ESP8266 nodemcu 多功能單按鍵

一般按鍵大都只做一件事,但是nodemcu 可以利用 tmr.alarm 這個功能
在指定時間內讀取按鍵被按了幾次,
這樣一個按鍵就可以執行多種不同的功能。
(nodemcu 一共可以設 6個alarm)

在 init.lua 裡定義 b=0
並 dofile('button.lua')
在button.lua 裡定義如下

function buttdo()
  if b == 1 then
     do something as 1
  elseif b == 2 then 
     do something as 2
  elseif b == 3 then 
     do something as 3
  elseif b == 4 then 
     do something as 4
  else
     print(b)
  end
  b=0
end

function buttcheck()
  if b == 0 then
    tmr.alarm(4,1100,0, function() buttdo() end)
    -- 利用 alarm 1100(1.1 秒) 時間來累積按鍵次數
    -- 時間到,由buttdo() 去查總共按了幾次,執行對應的事
  end
end

gpio.trig(2,"down", function() buttcheck() b=b+1 tmr.delay(200000) end)
-- 如果按鍵已經被按下,按鍵在接下來的1.1 秒之間只用來累積次數
-- tmr.delay(200000) 是用來避免按鍵按下時在極短時間內被算成按很多次
-- 200000 是 0.2 秒,這是我自己試的經驗值,或許你的狀況不一樣

國旗 賣國賊 內褲

「你們這幾天不斷罵我去見習主席像小媳婦,
不斷罵我是賣國賊,
完全否定我很愛國的事實!   
告訴你們,
其實那天我有偷偷穿了一件
印著中華民國青天白日滿地紅國旗
的         
內褲   
你們都沒發現,對吧!
本來是想翻出來給習主席看的,
但是現場記者先生小姐很多,
我怕她們會跟我索取
原汁內褲,
由於我當天來回,只能穿一件       
一定不夠
所以就一直沒提到這件內褲
相信我,我確實帶了中華民國旗去見習主席,
國旗還跟我貼身24小時,
看,我多愛國啊!
你們以後不能再罵我小媳婦、罵我賣國賊了」

2015-09-22

ESP8266 微控器快速入手

ESP8266 出貨內建的是AT指令,還真難用!

本來是想換用 micropython
https://github.com/micropython/micropython/tree/master/esp8266
但是目前很多功能還沒有,所以只好換用功能較齊全的 nodemcu lua
https://github.com/nodemcu/nodemcu-firmware/releases
下載它的 0.9.6-dev_20150704/nodemcu_float_0.9.6-dev_20150704.bin

用這裡的 esptool.py 把 bin 檔燒進ESP8266 裡就大功告成了
https://github.com/nodemcu/nodemcu-firmware/tree/master/tools

之後用這個把寫好的 lua 程式傳進ESP8266 裡就可以執行
https://github.com/CHERTS/esp8266-devkit/blob/master/Espressif/utils/nodemcutil.py

連線可以利用 python-serial 內附的 miniterm.py
miniterm.py -p /dev/ttyUSB0 -b 9600
連進去之後以 dofile('xxx.lua') 來執行即可

開機後會自動執行 init.lua, 可以在這個檔裡指定接下去要做什麼,
來呼叫其他的檔案,像是執行 web server 或telnet server, 在ESP裡
是不能同時執行兩種 TCP service, 只能擇一

ESP8266 的wifi 可以同時兼俱 client(接收) 跟 AP(發射), 兩者有不同的 MAC addr.

所以也可以完全關掉wifi 功能,單純當做MCU (如果想省電的話(電池供電時))
wifi.sta.disconnect()

開機後可以藉由按鈕(button) 來呼叫某項功能或執行檔案,例如第2 腳(GPIO 4)
接一個按鈕來執行讀取溫度的功能
gpio.mode(2,gpio.INT)
gpio.trig(2,"both",function() temp() tmr.delay(200000) end)
這裡的 tmr.delay(200000) 是用來避開雜訊以免按一下變成按很多下

ESP8266 只有一支analog 腳可用! 用法是 N=adc.read(0)
CHP_PD 是一定要接3.3V 所以乾脆把它跟VCC(3.3V) 拉一條OK線永久短路

而 GPIO 0 只有在燒 nodemcu firmware 時才需要接地,正常使用時就讓它懸空。
 使用新版nodemcu 的腳位在這裡
https://github.com/nodemcu/nodemcu-firmware
(往下拉到 GPIO NEW TABLE ( Build 20141219 and later) )
從正面看,右邊就是 1,2,3,4,8 左邊是 5,6,7,0 共九支 GPIO, 其中
第0腳(GPIO 16)會拉成HIGH 所以要把它改成LOW,
第4腳(GPIO 2)也有同樣情況,但是可以用 gpio.INPUT 把它改變成LOW

可以利用 tmr.alarm(0,xxxx) 來設定最多七組不同功能分別在背景裡等待執行或不斷循環執行。
其它像是利用 pwm 的 clock 來讓buzzer 發出不同頻率的聲音,利用 pwm 的duty
來指揮 servo 的旋臂轉動

使用超音波聲吶 HC-SR04, 不過好像遠一點就測不準?

函數語法說明在這裡
http://www.nodemcu.com/docs/

lua 還蠻容易上手的,也不用像Arduino 要用C 寫好再compile 再燒進去,
而是直接寫、直接執行。

有個情況是某些模組接了 PL23xx 的 USB TTL 轉接器時,無法通連 TX/RX
而換成 FTDI 的USB TTL 就可以,所以如果有問題的話,電源方面要多試試。

2015-07-31

柱柱姊: 查某人就是要……

柱柱姊今天在嘉義縣成立後援大會時說婦女要的不多,然後柱柱姊說:
「查某人(女人)就是要安定,啊不要吵、不要亂,所以我說道德很要緊!」

柱柱姊真的好有學問!
用這樣在寫藏頭詩耶!
還好我懂柱柱姊的心,柱柱姊要表達的,其實是這樣
查某人就是要緊!』

懂了嗎?
懂了嗎?
懂了嗎?

要緊!所以要說三次!

沒看人家小S天天在保養的嗎?
要緊!
要緊!
要緊!
再說三次 !


2015-07-25

ESP8266 有翅膀的微控器

之前稍微聽到ESP8266, 可能是被誤導了, 以為它是個 for Arduino 的Wifi module.

最近才知道原來它本身就是俱有 GPIO, I2C, ADC, SPI, PWM, UART 還有Wifi.
更特別的是它的速度 80MHz 跟容量 比多數Arduino(32U4 base) 還要高又大。

還有一個特點, 就是它更便宜, 露天價大約150到200左右,其它的價格可以略過.

重點來了,由於它的容量比較大(相對於Arduino), 因此一些無法在Arduino 上面
執行的東西都變成能了!

原本microcontroller 大都是以C 為主, 但是在ESP8266 上面卻有五花八門的語言
工具可以選擇,包括古老的AT command, 現代的lua, python, 工具介面甚至可以
直接拿Arduino IDE 來用.

有翅膀是說它俱 wifi 通訊能力,又有一般微控器的功能,相較於 Arduino Yun
似乎好處多很多!

2015-05-22

大家來寫 Telegram 機器人

微軟把MSN玩死了,現在沒有MSN server可玩,以前根據 msnlib 寫的機器人都不能動了!
而 LINE 則是商業軟體,有人解出它的通訊模式, 寫成python 模組,就被LINE公司發函封口!
所以也不能寫 LINE 機器人。

還好有open source 的 Telegram !
Telegram 真是好物,因為它是open source 所以有了各種可能!
Telegram 跟LINE 的使用方式幾乎完全一樣,會用 LINE 的人幾乎立即可以上手。
Telegram 跟LINE 一樣有iOS, Android, Windows, MacOS 等版本, 但不同的是
Telegram 有Linux 版本!

Telegram 更有文字模式版本!就是 telegram-cli
git clone --recursive https://github.com/vysheng/tg.git
cd tg; ./configure --disable-liblua (用不到 lua 的話)
make
不過在make 之前你可能要先裝
libreadline-dev libconfig-dev libssl-dev libevent-dev 幾項libraries.
雖然它不是Telegram 團隊寫的,但因為 Telegram 是open source, 所以
telegram-cli 跟Telegram 完全相容!

網路上有一些以 lua 或 python 寫的 telegram-cli BOT, 也就是搭配 telegram-cli
可以自動收發資訊的外層程式,但是各有限制,所以我想想不如自己寫一個。

自己寫的好處是完全以容易寫、方便自己用,為目標,
只要利用 python 的 pexect 就能完成一個相當實用的 telegram-cli 機器人!

這裡來說一下重點,重點抓到後,細節可以千變萬化!

第一是
tg = pexpect.spawn('telegram-cli -k /path/server.pub -CNW')
tg.timeout = None
這樣會保持不跳開

第二是
tg.expect("> ")
這是 telegram-cli 在 standby 狀態時的提示符號,我們等它出現這個值,
然後來定義一些常數以便往下能使用。

第三是
while True:
進入無限迴圈,這樣便能處理「收、發」,這裡第一個要的是
tg.expect(">>> ")
這是有外來的資訊時會出現的指標,根據這個指標我們可以獲取兩段資訊。

在 ">>> " 出現之前的一段,是來訊的序號以及發訊人
Usend = tg.before.split()     #這是我們要的前一段
UID = Usend[-2]+'_'+Usend[-1] #這個可以得到對方的代號,用來送訊給對方

後一段就是資訊文,要再次利用系統提示號來區隔資訊文
tg.expect("> ")
在上面那個 ">>> " 之後,到這個 "> " 之前的一段,就是資訊文,或者就像是
我們在 LINE 聊天所送出的文字。
Umsg = tg.before
Ump = Umsg.split()
這裡故意分成一個未分割的 Umsg,以及一個分割的 Ump

如果 Umsg 的開頭是 "[photo" 或 "[image"
if Umsg.startswith('[photo') or Umsg.startswith('[image'):
我們的機器人就自動下載存檔(所以一開始 telegram-cli 的執行參數要有大寫 "N")
tg.sendline('load_photo %s'%Usend[-4])

上面只是一個例子,我們還可以定好指令字串,像收到對方送來 "get /path/file"
就可以區隔出他的指令是 "get" 也就是
if Ump[0] == 'get':
然後再區隔出後面非固定長度的的路徑+檔名
FILE = Umsg[4:].strip() 然後加上來訊對方的 UID
tg.sendline('send_file %s %s'%(UID,FILE))
來送出對方指定要抓取的檔名

也可以訂一個指令,像說
if Ump[0] == 'temp':
然後經由analog GPIO 去讀取 LM35 感溫晶體來回報目前溫度
tg.sendline('send_text %s %s'%(UID,temperature))

當然我們還可以訂一個自由指令,就是不事先訂好的字串,像說
if Ump[0] == 'cmd':
然後再來區隔出 'cmd ' 之後的任何字串
Ucmd = Umsg[4:].strip()
然後以 os.system 或 os.popen 來進行自由指令的執行
os.system('%s > /path/ucmd.txt'%Ucmd) 再由
tg.sendline('send_text %s /path/ucmd.txt'%UID)

這樣我們又有機器人可玩了!

2015-03-18

慈濟的五鬼搬運與攝魂大法

自從釋昭慧挑起慈濟與社會的對立以來,數十年不見天日的慈濟內幕
終於一一被翻出來檢視,善男信女捐出的錢被五鬼搬運去做各種見不
得人的炒作,土地、基金、股票樣樣來,跟世俗財團沒有兩樣!而且
還不必受任何人監督!

那天查看了一下慈濟的公開資料,赫然發現慈濟還有攝魂大法,
能控制得道高僧的投胎轉世!

印順老和尚既已於2005年6月4日圓寂,沒想到慈濟大覺者施用
攝魂大法把老和尚抓了回來,
硬是指派印順老和尚去當慈濟大學的董事!

http://foundations.olc.tw/directors/index/%E5%8D%B0%E9%A0%86
看看第一筆,慈濟大學,董事,印順,到職日2005-12-15
(以下為截圖,以免原資料被偷改)
來看看wikipedia 釋印順條目
http://zh.wikipedia.org/zh-tw/%E9%87%8A%E5%8D%B0%E9%A1%BA
釋印順(1906年3月12日-2005年6月4日)









一般投胎轉世也要等十個月才生出來吧?
短短六個多月就能出娘胎還當董事!
果然宇宙大覺者神通廣大!
咦!應該不是神通,是妖術!

2015-02-27

感恩釋昭慧,妳是「自己人」!

如果沒有釋昭慧急著跳出來替慈濟當打手、打柯P,慈濟數十年來幹的那些
骯髒事、邪惡事不會一一被攤到陽光下讓世人檢視。

今天就是釋昭慧狗急跳牆的護主行動,反而讓世人看清慈濟原來就是個   
打著宗教旗幟的邪惡財團,跟頂新魏家、遠雄趙家都是同一伙的人民公敵!

我們應該感謝釋昭慧、感恩釋昭慧!謝謝妳,妳是「自己人」!

2015-02-14

飛機上玩GPS定位

最近出差,回來的途中,確認手機的GPS在飛行中,是可以正確辨識飛機
所在點的經緯度、高度、速度等等。

之前可能是在一開始等得不夠久,以為手機運算速度太慢,或是機艙窗戶
太小訊號不夠,所以解析不出來。這次發現只要先放在窗邊等久一點,機艙
小窗還是可以有足夠的衛星訊號,甚至誤差可以小到五、六公尺範圍內。

打開GPS後,先跑GPS Test的app,等到解譯出經緯度,再把手機拿到用餐
那個小板上面(坐靠窗位子),就可以繼續顯示飛行的經緯度,或是在孤狗
地圖上顯示飛行位置了。

當然我是在空服員說可以開始使用電子用品之後,才開啟手機GPS,然後
啟用軟體讀取。要試的人請從起飛之前就乖乖的關掉GPS,也切換成
「飛行模式」吧!

因為是夜航班次,本來也以為機窗玻璃透光不夠,又會反射艙內的光線,
在夜黑的空中應該看不到什麼,可是這次忽然看到類似天蝎座,過一下又
看到旁邊是月亮,手機app這時就是最好的工具,我裝的是Astro Tools,
開啟後讓GPS來定位,然後進入星圖畫面,用手撥幾下馬上看到Moon以及
旁邊確實是天蝎座。

2015-01-06

福爾摩沙,美得像紐西蘭

最近在翻閱這本劉克襄廿幾年前寫的書
http://goods.ruten.com.tw/item/show?21440359900423
《橫越福爾摩沙:外國人在台灣的旅行,一八六〇至一八八〇》

是一百多年前幾個西方人在台灣旅遊探險的紀錄文獻,其中有一段提到
「香魚往往在白露前後離開烏來、坪林上游,立冬時游到公館、古亭附近,
在那裡產卵,長成透明的小香魚後,隨溪水出海,一秀過去,再溯淡水河回來。

原來一百多年前的台灣動植物繁茂、河川又長又美!
原來台灣曾經像紐西蘭一樣美啊!(或者甚至更美?)
難怪葡萄人給台灣取名Formosa!

我跟朋友提到這一段,結果朋友說他媽媽小時候住公館,吃香魚吃到生氣!
因為他外公天天釣香魚回來烹食!大概是七八十年前的事了。

從Google找到的資料是,台灣原生種香魚(也就是小魚會延淡河流到大海,
再洄游到烏來、坪林那種),在國民黨佔領台灣後不到十年(1953)就滅絕了,
現有的香魚都是從日本引進養殖的不會洄游的品種。

在這本書裡還發現一個好笑的事,就是那幾個西方人看到當時中國士兵都會在
胸前及背後衣服上,畫上一個大大的圓型(上面寫『兵』『勇』那種),覺得非常不解?
他們想不通的是「為什麼中國人要在身上致命的部位,畫一個大大的靶?這樣不是
在跟敵人說『射這裡!射這裡!』嗎?」

我們看電視、電影裡好像很習慣看到這個畫面,也好像從來沒人有疑問?
現在軍服都是盡量畫上跟地貌近似的迷彩,就是要讓敵人分不清人體的位置。

不過我想到的是,官兵可能是為了躍武揚威才畫上那個圓來寫『兵、勇』,
自古以來官兵欺壓百姓是很自然、很正常的,寫上這兩字更能無所懼憚的去欺壓百姓。