星期三, 11月 25, 2015

Merryfair WAU

下班回宿舍若敲筆電, 筆電是擺在桌上的, 要敲鍵盤肩膀幾乎都是聳起來, 很不符合人體工學. 長久下來, 肩膀開始疼痛, 應該是肌肉持續不當出力的結果.



為了解決這樣的問題, 買了螢幕架把螢幕架高, 避免頭過低. 又買了無線鍵盤, 把鍵盤放在鍵盤架上, 降低打字時的手臂高度. 環境調整之後的第一個禮拜, 肩膀的問題就得到了改善不再復發. 由此可見人體工學有多重要, 特別是我這種每天打電腦的阿宅.




最近公司又在辦Ergohuman 111團購, 同部門的同事幾乎每人都一把111
.



不是待在賺大錢的公司, 不像Yahoo都是配Aeron還拿來堆箱子[1]




辦公室配的是這種平價布面辦公室椅, 尤其背部空間很不服貼, 三不五時就要挪動屁股調整一下. SAYL當時在PCHOME特價9990(應該是最陽春的版本), 但是沒有試坐就買很不踏實啊! 所幸豪優在新竹開了新店面, 照顧到所有宅宅的坐姿吸乾了所有宅宅的錢包




很可惜的是SAYL豪優並沒有擺, 老闆說不好賣, 大概是陽春然後又貴, 同樣價錢下, 大家寧願轉買台灣品牌的111吧?!


結果一轉眼我看到一張橘色很亮眼的椅子MerryFair WAU, 試坐了一下是跟網椅很不同的坐感, 包覆跟支撐性強, 但如果坐姿不正確, 舒適性會不如網椅. WAU開箱文或討論非常非常非常少 (跟Ergohuman111相比的話)[2][3]. 後來再試坐了一下111, 如果是用來休息是張很棒的椅子, 但拿來辦公總覺得缺了甚麼!? 


豪優老闆報價WAU 18000, 一聽到價錢興趣全失, 寧願再去找找SAYL試坐, 可惜隔天9990的SAYL就沒了~ (pchome上面特價都一陣一陣的, 錯過了就要再等一陣子) 所以完全放棄SAYL. 後來我就轉念尋找WAU, 找到的最低價是12800, 結果隔天gmail裡躺著一封pchome的降價通知信, 原本pchome 24h賣14800的WAU降到9800...就在天時地利人和之下, 手一滑, 這張椅子就出現在我的辦公室了...



沒有花太多心力把這張椅子照得美美的, 看官們加減看看就好.

這張椅子的質感沒有我想像中來的好, 整張椅子是塑膠成型, 很多地方收邊都收得很差, 論整體的細節是不如111的(我辦公室有六張111, 所以累積了一些心得). 不過WAU可調整性還不錯, 我覺得有比111好, 我認為有花心思在設計調整機構. 

不如111的就是坐墊的深度不夠, 而且也無法像111可以前後調整, 這點是遜於111的.
另外, 為了達到支撐性, 犧牲了乘坐的彈性, 也就是因為這張椅子形狀固定, 無法像網椅可以隨著坐姿有些微的彈性調整空間, 所以只要姿勢不對, 或者椅子的調整不對, 這張椅子就會非常的不舒適!!!

所以建議對WAU有興趣的人, 一定要花點時間調整和試坐, 才知道這張椅子適不適合你 (其實每張人體工學椅都需要時間相處才知道你們適不適合).


最後來一張111跟WAU的合照.

[參考]
  1. 帶你逛超豪華 Yahoo!奇摩 辦公室
  2. [情報] 【Merryfair】WAU工學 $9990
  3. Merryfair WAU 2 入手

星期五, 11月 20, 2015

UART over Wifi by NodeMCU (Programming NavSpark via ESP8266)

動機

NavSpark是個包含GPS功能的Arduino相容版, 詳情請看我之前的網誌: NavSpark Mini初體驗 .
會選用這片做為Arduino, 想必會用到上面的GPS功能, 但麻煩的是, 每次coding燒錄完之後, 若要確定程式正確, 勢必得挑一個可以收到GPS訊號的地方. 我當然大可以帶著筆電和NavSpark去外面coding, 但在寒冷的晚上又要餵蚊子, 不是個很好的coding環境.

又或者我可以拉一個GPS天線到室內, 然後接上NavSpark的IPX接頭.


以上兩個方法似乎都不是很好的方式, 後來我想到UART X Wifi的方式, 這當然不是甚麼先進的想法, 一些天文觀測的同好早就用這樣的方式, 在室內/帳棚內輕鬆遙控寒冷星空下的望遠鏡.
但是這類的周邊通常都不太便宜(當然淘寶找可以便宜很多....), 若只是為了開發驗證用, 這樣的開銷划不來.

串列埠轉WIFI模組 UART to WiFi EM-380C(BB-MAXCHIP) NT$3,300
A06-0029 UART轉WIFI模組 NT$1890


剛好我手邊有片ESP8266 Wifi模組, 又具備UART的功能, 看來只要適當的設定就可以達到UARTx Wifi ! 而且這片ESP8266只花費百圓餘而已!



com0com/com2tcp

如果有兩張ESP8266, Wifi的細節由EPS8266內部處理掉是最理想的了, 可惜的是我手邊只有一片ESP8266可用...



透過com0com/com2tcp的方式, 可以省略掉USB-Serial, 但是需要多一個WIFI Adapter, 不過若是用NB, 應該不會缺乏WIFI Adapter.


本文是朝向使用com0com/com2tcp的方向規劃.
另外, com0com官網上的安裝檔附的驅動不含簽名, 在win7下是無法使用的, 建議可以改下載[1]或[2]的com0com安裝檔進行安裝.

NodeMCU

根據[3], ESP8266可以用AT Command/NodeMCU/原生SDK/Arduino等方法開發(WebSDK就不適用於這裡的用途了, IoT比較適合).
看來比較適合且不用花太多時間的就屬NodeMCU和Arduino, 其中NodeMCU是以script方式執行, 可以略過編譯及燒錄的冗長時間, 最後NodeMCU出線.

為了用上NodeMCU, 需要先將Node MCU Firmware燒錄到ESP8266, 可以參考[3]的說明操作.

Telnet Server

由於com2tcp支援telnet協定, 因此ESP8266端運行一個telnet server, 將接收到的訊息傳送到UART, 再將UART發出的訊息回送到telnet client, 如此就可以做到雙向溝通.
運行在NodeMCU上的telnet我是以[4]為基礎下去修改. 結果下面會提到.

首先NodeMCU將init.lua及wifi.lua設定為以下內容:

--init.lua
dofile("wifi.lua")
--wifi.lua
print("set up wifi mode")
wifi.setmode(wifi.STATION)
wifi.sta.config("skyforce","0913679376")
 --here SSID and PassWord should be modified according your wireless router
wifi.sta.connect()
tmr.alarm(1, 1000, 1, function() 
    if wifi.sta.getip()== nil then 
        print("IP unavaiable, Waiting...") 
    else 
        tmr.stop(1)
        print("Config done, IP is "..wifi.sta.getip())
        --dofile("yourfile.lua")
    end 
 end)

telnet server的script如下,  但不建議一開始就放在init.lua直接執行, 因為執行script後, UART會直接轉向telnet, 因此NodeMCU無法再透過UART被操作, 等於NodeMCU會變成磚(只剩下UART轉Wifi的功能), 除非重燒韌體.

所以請先用手動執行的方式, 確認整個環節都打通了, 再把telnet server script放到init.lua讓他開機自動執行.
telnet.lua[4]:
--simple_telnet.lua
baudrate = 115200
telnet_port = 23
uart.setup( 0, baudrate, 8, 0, 1, 0 )

s=net.createServer(net.TCP,60) 
s:listen(telnet_port ,function(c) --c : net.socket module
   --send 
   function s_output(str) 
      if(c~=nil) 
         then c:send(str) 
      end 
   end 
   --node.output(s_output, 0)   -- re-direct output to function s_ouput.
   uart.on("data", 0, s_output, 0) 

   --receive
   c:on("receive",function(c,l) 
      --node.input(l)           -- works like pcall(loadstring(l)) but support multiple separate line
      uart.write(0,l)
   end) 

   -- disconnect
   c:on("disconnection",function(c) 
      node.output(nil)        -- un-regist the redirect output function, output goes to serial
   end) 
end)
若要NodeMCU開機時就啟動telnet server, 將init.lua改為:
--init.lua
dofile("wifi.lua")
dofile("telnet.lua")


com0com/com2tcp的設定

com0com照預設的方式安裝好, 並不需要額外的設定. 只要記得com0com的兩個COM port即可.



com2tcp則按照下面的參數執行
com2tcp --baud baudrate \\.\com##  ip port
baudrate的部分照NavSpark UART的baudrate去設定即可, NavSpark mini的UART預設為115200, 因此我也設定在115200, 但115200用來燒錄其實很慢.
com##則要看com0com安裝時配給的com來決定, 依照我的環境設定COM16, 而COM15提供給Arduino或GNSS Viewer燒錄用.
ip則填入NodeMCU跟ap所取得的ip.
port則按照telnet標準port為23.

GNSS Viewer燒錄問題

GNSS Viewer燒錄時可以改變原本的baudrate, 縮短燒錄時間, 但這一招用在UART x Wifi似乎行不通, 比較可能的解釋是這樣的:

在原本的架構下, GNSS Viewer通知NavSpark改變baud rate, 然後comA接著更改到相同的baud rate, 兩邊就可以用新的baud rate繼續溝通



但是當我們採用Wifi的方式燒錄,  架構中共有三個UART設定, GNSS Viewer可以改變UART1, NavSpark也改變了對應的baud rate, 但是com2tcp對應的UART2及ESP8266對應的UART3卻沒有跟著改變, 因此整個UART並沒有用相同的baud rate去運行, 因此整個baud rate改變的機制無法正常運作.



暫時想不到解決方法, ESP8266或許可以攔截UART訊號去改變baud rate, 但是com2tcp該怎麼作到動態改變baud rate我就不知道了. 目前最快的方式, 可能是直接將UART1/2/3的baud rate設高一點縮短燒錄時間.

com2tcp若不開啟 baud rate emulation, 是可以不用care baud rate設定, 參考自這裡. 因此UART2的設定可以don't care.




[參考]

[1]Com0Com v3.0.0.0 utility for W7 x64 platform, signed driver.
[2]Com0Com v3.0.0.0 utility for W7 x86 (32bit) platform, signed driver.

IoT x MQTT Resource



MQTT Server/Broker

MQTT Server/Broker Benchmark

HiveMQ MQTT Broker


MQTT Web Client

A full-featured MQTT client for your browser

MQTT Android Client

IoT Manager

DIoTY

ESP8266 MQTT Client

NodeMCU MQTT CLIENT MODULE

星期一, 11月 09, 2015

Memory Layout of C

近來開發Arduino遇到了記憶體配置的問題, 但Arduino內沒有足夠的debug資訊讓我了解是stack或heap overflow, 所以我想透過stack或者heap的指標位址來判斷可用的記憶體空間.


爬完wiki上的Data segmanet介紹, heap在下stack在上, heap跟stack是面對面, 中間夾出的區域就是可用的記憶體空間. 但是我先用visual C++來驗證, 卻發現跟wiki描述的不符, 似乎是相反過來的!?

後來在stackoverflow找到有人跟我同樣疑惑, 看來是linux/windows在記憶體配置上是有差異的.

win32的記憶體配置應該如下圖, heap跟stack是背對背, 往不同方向去成長.

星期三, 11月 04, 2015

ESP8266 ESP-201 X Arduino

網路上較少ESP-201當Arduino的中文文章, 所以每次要接線都要翻閱資料許久. 英文資源雖不少, 但每次重看都需要稍微消化一下才懂.
這張全pin引出, 且可安裝在麵包版的ESP-201(雖然需要小小改造一下), 是很適合拿來開發的板子. 我把開發ESP-201的基本設置筆記如下, 方便記性不太好的我可以翻閱.



ESP-201 header改造

ESP-201這張模組雖然拉出所有pin-out很方便, 但犯傻做錯了兩件事情:
  1. RX/TX的header方向讓ESP-201無法安裝在麵包板上
  2. 把pin的名字印在電路板的背面, 這樣裝上麵包板誰看的到
或許一開始設計就不打算讓大家裝在麵包板上.......
首先要解決第一個問題, 根據[2], 把RX/TX的header焊到另外一端即可, 或者你要更搞剛把兩個11-pin header焊到另外一邊, 這樣上述兩個問題就一次解決.......否則就照下圖的方式修改[2]:
before

after



ESP-201接線

但是ESP8266 Arduino官網卻沒提到如何燒錄/連結ESP-201的資訊, 這讓我有點頭痛.
另外ESP-201上面標示的pin-out也跟一般ESP8266不一樣, 必須了解一下對應關係....
幸好已經有心人整理出下面這些圖[1]:




ESP8266 Arduino官網提到Generic ESP8266的連接方法[3]:



但是這個方法需要USB-Serial可以拉出RTS, 以便控制ESP8266 Reset. 我手邊的USB-Serial都沒有拉出RTS, 像這種:



全部pin-out都有拉出的模組是比較適合搭配ESP-201的:


若你的USB-Serial也沒有RTS, 可以手工焊上鍍銀線把RTS拉出來, 但是沒地方可固定感覺不是很穩固, 只好作罷. 後來找到這張表:


模式
GPIO
1520
1SDIO1xx系統工作在 SDIO 模式, 可以用外部 MCU 驅動内部WIFI
2工作模式011系统從外部FLASH 啟動
3燒錄模式010系统自動進入升級狀態,等待Serial-port下達命令



照表操課, 如果要燒錄的話, 要這樣接[2]:
GPIO0和GPIO15有接地即可燒錄. GPIO2可能內部有上拉電阻(?), 所以沒接也ok.



但每次上電後只能燒錄一次, 若要再燒錄必須斷電, 或者讓 RST接地讓ESP-201Reset.
我是直接拉出RST到微動開關,微動開關接地, 再加一個上拉電阻10k確保不會沒事Reset, 這樣每次要重新燒錄前, 按一下微動開關就好了.




還有人將ESP8266所有pin-out整理成一張非常棒的表[4], 開發時接線很方便:



我試著將上述幾張表整合成一張, 方便查詢:


Arduino IDE環境設置

接好線後, 設置ArduinoIDE環境, 我是使用 Arduino core for ESP8266 WiFi chip 提供的core, Board Manager URLs 為:
 http://arduino.esp8266.com/stable/package_esp8266com_index.json


安裝好官方Arduino IDE後, 再設定Boards Manage即可使用. 細節請直接見 Arduino core for ESP8266 WiFi chip官網.


ESP-201燒錄

從node.info()讀出來的訊息[2]:
flash size(byte)flash mode (SPI mode)flash speed(Hz)
512040000000

但我後來發現, 每一片ESP-201的flash不一定一樣, 同樣從node.info()讀出來, 我手上的ESP-201 flash參數如下:
flash size(byte)flash mode (SPI mode)flash speed(Hz)
512220000000

其中flash mode的部分不太確定數字對應的意義, 若參照[5]的說明:spi mode(0=QIO, 1=QOUT, 2=DIO, 3=DOUT)

註: 後來發現node.info()讀出來的值, 跟當初燒錄韌體時的設定是連動的, 也就是說這裡的值是設定好的, 未必直接關連到板子上的flash.
若你是用NodeMCU的燒錄工具, node.info()的值則直接關連到下圖的設定值:


Arduino IDE燒錄時的設定應該如下:



Flash Frequency的地方, 預設只有40和80MHz, 額外的頻率需要自行設定, 在 AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\1.6.5-947-g39819f0  的目錄下(可能因為esp8266-arduino版本不同而目錄名稱略有不同), 編輯 boards.txt:




找到FlashFreq的欄位, 新增20/26.7兩種頻率即可.


[參考]

  1. ESP8266 ESP-201 module - first impressions
  2. ESP8266: ESP-201 breakout board review
  3. Generic ESP8266 modules
  4. ESP8266之GPIO功能、資源探索
  5. MOD-WIFI-ESP8266 Reflashing question

http://www.barissanli.com/electronics/nodemcu.php
http://www.areresearch.net/2015/05/flashing-running-esp-201-module.html

ESP8266 ESP-201 module - antenna troubleshooting


Mr.Color飛機模型用Color 與 水性AQUEOUS HobbyColor 對照表

          最近跟兒子一起研究長谷川的飛機模型, 其中說明書中採用的模型漆色號以Mr.Color硝基漆為主, 水性漆AQUEOUS 為輔. 很多Mr.Color有的顏色, AQUEOUS 都沒有, 前100的色號大致上都有對應到, 但Mr.Color 300號以後的都是特...