發表文章

目前顯示的是 5月, 2012的文章

水族箱控制器 : Arduino 首部曲

圖片
每次都在幫別人設計東西,今天決定為自己的魚缸設計個東西,國外的網站有很多人在作,好像還有賣整套的,趁有空,趕快找一下自己的零件,先找出自己之前 LCD 1602 的顯示模組,我好像也有現成的顯示程式,參考一下: Arduino 模擬 Modbus Slave LCD 1602 (I2C 介面) 這次用 Arduino Duemilanove  ATmega168 ,用這塊板子沒什麼特別理由,因為最先找到就是這一塊,再加上一塊 Arduino sensor shield 4.0: 然後又碰到工程師最怕的一件事,改版本從原來的 Arduio 0022 升級到 Arduino 1.0.1: Arduino 1.0.1 結果原有舊的Libraries Compile 都會有 Error, 只好上 LCD1602字符液晶显示器 再下載新版的 Library,終於可以 Compile 完成,我先用 DFROBOT 原廠附的HelloWorld 來測試顯示模組,結果都不會顯示字元,原以為是 LCD 1602壞了,結果是自己糊塗了,忘了調整  Arduino sensor shield 4.0 上的 jumper: 調整 jumper 後 就可以看到 : Hello World 接著就是要連接 DS18B20 1-wirw 設備,讀取溫度,這一段可以參考 Arduino 溫度感應 ,不過這一次我沒有用麵包板,而是直接把電阻差在接頭上: 4.7K歐姆的電阻接在接頭上 1-wire 的 Library  OneWire.zip  其中有一個 DS18x20_tempature 的 範例,Upload 程式並執行,從 Serial Port Monitor我們就會看到: 溫度的值收到且 Arduino 有發現DS18b20 ,再來應該就是把溫度送到 LCD 1602 上,這段程式主要是改 DS18B20 的 example 展現出來就是: 看來魚缸可以有自己的溫度顯示器了。

Aspire Revo R3700 wake-on-lan (遠端喚醒)

圖片
前幾天才改裝完 TP-link 成 DD-WRT, 今天就有人希望我能用 DD-WRT 去 WOL Aspire Revo R3700,這台PC 應該算是一台Home theater media PC,網路上有很多人在討論這台上用WOL 喚醒,我看有些人很容就設成功,但是有些人卻沒結果,我要測的系統的基本資訊如下: 系統基本資訊 首先在 BIOS 中 Power Management 有幾項要先設定: ACPI Suspend Mode = S3  Deep Power Off Mode = disabled Power on by PCIE Devices = Enabled  接著要回Window7中去設定: 裝置管理員> Realtek PCIe GBE Family Contoller>內容>進階 Energy Efficient Ethernet:  關閉   環保節能: 關閉 Wake on Magic Packet: Enabled Wake on Pattern Match: Enabled 關機網路喚醒: 開啟 WOL and 開啟連接速度: 10 Mbps  開啟連接速度我是設在 10 Mbps。 然後要在: 裝置管理員> Realtek PCIe GBE Family Contoller>內容>電源管理 [x] 允許電腦關閉這個裝置以節省電源 [x] 允許這個裝置喚醒電腦 [x]] 只允許 magic packet 喚醒電腦 我原本認為應該不要鉤選 " 允許電腦關閉這個裝置以節省電源",但是好像不鉤連第二項 " 允許這個裝置喚醒電腦" 都無法勾選。 都設完後最好還是到 Command window(cmd) 中去執行一下 PowerCfg: 執行: Powercfg -devicequery wake-armed <enter> 系統回應: Realtek PCIe GBE Family Controller ..... 最重要是要看到要用來當 wol 的介面卡,這樣就表是設定完成。 再來就是要設定 dd-wrt: WOL 設定畫面 如果想在電腦還沒有睡眠前先測一下 W

TP-LINK WR740N 改用 DD-WRT

圖片
因為最近電費要漲,所以很多工廠用的電腦現在都希望能越省電越好,就連原本用來遙控遠端自動裝置的電腦也被要求要能自動進入睡眠狀態,睡眠狀態是還好,只是要遠端喚醒就有些複雜了,有些高檔的路由器是可以支援WOL(Wake On Lan)的廣播,很多便宜的則不支援,很多小公司則不知該怎麼辦。 在網路上查到有人用 Arduino 作一個 WOL repeater,但是算一算成本也要 2000 多,手邊剛好有一顆 TP-LINK-WR740N 的無線分享器,而且網路上有 DD-WRT內建 WOL發送的功能,所以先上  http://www.dd-wrt.com/  找可以上傳的 Firmware。 應該是我還不太熟悉 dd-wrt 查了一陣子都查不到可用的 firmware,最後好不容易在這 ftp://dd-wrt.com/others/eko/BrainSlayer-V24-preSP2/2012/03-08-12-r18740/tplink_tl-wr740nv4/  找到了下載的檔案,檔案有 2 個: 1.  factory-to-ddwrt.bin 2.  tplink_tl-wr740nv4/tl-wr740nv4-webflash.bin 先進入 TP-Link 畫面 ,選擇 Firmware Upgrade,先上傳  factory-to-ddwrt.bin : TP-LINK 畫面 上傳完後,再登入dd-wrt 的畫面上傳 tplink_tl-wr740nv4/tl-wr740nv4-webflash.bin 再重新開機就可以看到 WOL 輸入的畫面了:

USB NetPower 8800 SDK 從 C++ 轉成 C# - Part 3

因為改 C++ 成 C#,最後再加把勁把程式改完整一點, 改完後的程式會在 Windows 登出或關機時自動將 USB NetPower的插座斷電,如果在把程式加入啟動中,Windows 開機時會自動將 USB NetPower 供電,關機或登出時,自動斷電。 完整 Source Code: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; using System.Configuration; using System.IO.Ports; namespace WindowsFormsApplication1 {     public partial class Form1 : Form     {         public const int FILE_ATTRIBUTE_NORMAL = 0x00000080;         public const uint GENERIC_READ = 0x80000000;         public const uint GENERIC_WRITE = 0x40000000;         public const int OPEN_EXISTING = 3;         // public const UInt32 INVALID_HANDLE_VALUE = 0xffffffff;         private const uint FILE_FLAG_OVERLAPPED = 0x40000000;         private const uint FILE_DEVICE_UNKNOWN = 0x00000022;         private const uint FILE_ATTRIBUTE_SYSTEM = 0x00000004;      

USB NetPower 8800 SDK 從 C++ 轉成 C# - Part 2

圖片
今天繼續 USB NetPower 8800 SDK 從 C++ 轉成 C# - Part 1 未完成的工作,先用 Google尋找一下有關PL2303的資料,結果找到了這一家 萬平科技網 ,這家公司主要是提供 USB to(轉) Serial(UART/TTL/RS232/RS485)的應用開發工具,這家的網路上有提供 PL2303 HXD原廠的4 * GPIO sample code及使用手冊 ,下載 sample code 並執行 PL2303 4 GPIO Test.exe,畫面如下: PL-2303 4 GPIO Test 很順利開啟連接埠,接著試用 GP0 及 GP1 等功能,發現 Net Power 只有用到 GP1,當 GP1 的值設成是 1 時插座供電,設成0時插座斷電: 測試 GP0 及 GP1 測到這我已經大概了解 C++ 對這 NetPower 所作的動作,現在就要來把 C++ 改成 C# ,這裡我是用 CreateFile 的 方式,由於 C# 已經不像 C++ 有提供 CreateFile 所以要用 Dllimport : [DllImport("kernel32.dll")]         private static extern IntPtr CreateFile(         string lpFileName,         uint dwDesiredAccess,         int dwShareMode,         IntPtr lpSecurityAttributes,         int dwCreationDisposition,         uint dwFlagsAndAttributes,         IntPtr hTemplateFile          ); 使用如下:   pl2303 = CreateFile("COM8",                                     GENERIC_READ | GENERIC_WRITE,                                     0,                

USB NetPower 8800 SDK 從 C++ 轉成 C# - Part 1

圖片
    今天要作的是用 c# 來操作 USB NET Power, 原想這是一個很小的專案,應該花2-3個小時就可以完成,結果耗了我快一整天的時間。    先看一下這個產品 USB Net Power 8800     原廠的配件:         這是一個用電腦 USB來控制插座的通電與否, 打開包裝後,將USB線跟電腦連接起來,系統會要求裝驅動程式,結果發現這是一個用 PL2303 USB to Serial 所開發出來的產品,裝上隨附光碟片上的NetPower.exe,執行後會看到如下的畫面: NetPower.exe    左下方的按鈕是綠色時插座可以通電,紫色則沒有電通過。 原廠的軟體還提供排程及原端呼叫的功能。這部分我就沒有測了,我主要的工作是要把原廠附的SDK 從 C++ 改成 C#,感覺應該是一件簡單的工作,但是真正的痛苦開始了,隨附的 SDK 是用 Visual Studio 2008 的 專案檔,我電腦上只有 Visual Studio 2010 C#, 所以我無法用隨附的專案建置一個新的執行檔。我原本的想法很簡單,我只是想用"偵錯"來執行一次隨附的 SDK,這樣我就可以了解SDK,而且可以很快的改成 C#。 基於這樣的想法,我去下載了 Visual Studio 2008 C Express, 建置專案馬上出現 "afxwin.h not found" 的錯誤訊息。 有點傻眼,再到網上搜尋,我了解到要用 Visual Studio TeamSuit 去建置專案才行, 下載  Visual Studio TeamSuit 可是一件很費時間的大工程。 看來只好用人腦來執行 SDK了。