2016年5月31日 星期二

「名詞定義] Zigbee的三種角色

Coordinator(網路協調器 節點):

負責網路的建立(WPAN Formation)及 網路位址(Short Address)的分配,

整個網路只能有一個Coordinator。


Router(網路路由器節點):

負責找尋、建立及修復資料包路由路徑(Routing Path),並負責轉送資料包,同時也可配置網路位址(Short Address)給子 節點(Child),可以有多個。
  

End Device(網路終端節點):

只能選擇加入已經形成的網路,可傳送資料,End Devicd可以透過週期性的睡眠來節約電力。


在Zigbee協定中,並沒有End Device之間P2P這種事情,不要跟802.15.4協定搞混 。











參考資料:

[EPS8266] AT Command (1) 基礎篇

不知道怎麼開始的,可以看這一篇 ,本篇主要介紹基本的幾個AT Command。


(1) AT+GMR  查看EPS8266 版本

















我這塊版子的AT版本是0.40.00 ,不同的AT Version 可能會有指令支援的差異。

SDK 則為1.3.0版本。


(2)AT+RST    重開囉~如果你改變模式,要重開機才會生效,就用這個指令。










































(3)ATE  是否回應你所打的字

ATE0 不回應 (例如你打AT,如果在ATE0模式,你只看的到空白行,再一個OK)

ATE1 回應 (預設值)

以下這個範例,我先打一次AT+GMR 後,輸入ATE0 ,再輸入一次AT+GMR,

你會發現最後一個段落的OK底下就直接出現回應的內容,並不會顯示我打的AT+GMAR。




參考資料:

http://www.pridopia.co.uk/pi-doc/ESP8266ATCommandsSet.pdf

https://room-15.github.io/blog/2015/03/26/esp8266-at-command-reference/

[賣摳Soft] 遠端桌面無法使用本地端的印表機- 解法

環境:

本機端 WIN7 64bit

遠端:    XP SP3

印表機:  HP LaserJet Pro MFP M125a (以USB連接在本機電腦)

問題描述:


本地端資源印表機,剪貼簿己勾選。

但遠端無法貼上,亦無法看到本地端印表機

看了網路上的幾種解法,也確定不是防毒或Firewall設定異常。

分享一下最後解法的方式:


以下動作皆是在逺端XP電腦

1.安裝 .net framework  3.5 SP1.

2. 選擇無安裝程式的驅動下載










3.點擊驅動程式,它會解壓縮到C:\HP_LaserJet_Pro_MFP_M125-M126

































接下來是新增印表機。











































 取消勾選自動偵測並安裝我的隨差即用印表機
 點擇FILE:(列印至檔案)
 從磁片安裝
選擇剛才解壓縮的資料夾
 選擇檔案(如果這個不行,選另外二個試試)
 按下確定
 下一步
 下一步
 不共用
千萬不要列印測試頁,會GG。
 完成,之後切結束端桌面,再重新連一次應該就有印表機了。



參考資料:

http://www.proposedsolution.com/solutions/remote-desktop-connection-rdc-printer-install/

「EPS8266」USB to TTL 連接EPS8266 初體驗

本篇紀錄一下初次讓EPS8266 可以使用AT Command的心得。



材料

1.電腦Windows or Mac(本例使用Mac)。

2.USB to TTL。

https://www.adafruit.com/products/954?&main_page=product_info&products_id=954

選擇這一條主要是原因如下,它使用PL2303TA 晶片,

初代的PL2303HX在新的OS上驅動可能會有異常。

另一個原因則是這版本的PL2303晶片使用的是3.3V的RX/TX ,

訊號,而並非舊版本的5V。


3.EPS8266 一片。

4.麵包版一小塊。

軟體


1.USB To TTL驅動一定要先安裝,如果是用Mac OSX  EI Captiant 1.6版(含)以上,

用1.5版會找不到裝置。

2.使用CoolTerm 這套終端機軟體,它是免費的終端機程式,基本上很夠用了。

http://freeware.the-meiers.org/


接線


首先參考EPS8266腳位圖(從網路上捉的,如果侵權請告知)

















接線方式:

EPS8266             USB to TTL

UTXD                   RX

CH_PID              3.3V

RST                      不用接

VCC                   3.3V

GND                   GND

GPIO2                不用接

GPIO0               不用接

URXD                  TX


連線



打開CoolTerm ,點擊Options

































Port選usbserial ,Baudrate選115200,其他都不用動。




























點選connect來做連接


































連線後,輸入AT按下Enter,如果會回應OK,代表你己經成功和Module連線。






參考資料:

PL2303 歷代晶片參考

http://www.oneping.com.tw/Technical_Articles/t_PL2303DM.htm


2016年5月30日 星期一

「食」億火鍋 頭份店

之前在苗栗市區吃過憶火鍋,最近聽說頭份開了新店,

趴趴走過去吃一下,奶奶的熊,生意一樣火紅,五點半到,

沒訂位要排到七點以後,但我還是要吃。


































門口的車超多,五點半到時,1F裡面己經坐了2/3 (有二樓,但我沒有上去)。
































偷拍一下櫃台結帳的小姐,忙碌中~
































空間很明亮,坐位以及走道空間都很寬敞。

































一整桌的新鮮蔬菜以及火鍋料,有蝦子、蛤仔、魚肉喔。































佐料區以及水果區。































飲料及冰淇淋區,有甜桶喔,好吃的那一種,脆脆的。還有咖啡機以及未入鏡的飲水機。









































菜單。
































我的養生鍋,花椰菜是在上面那個蔬菜區拿的,很少看到火鍋店有這個。

































蛋餃看到快去搶,不錯吃,右上是一片魚肉,沒有骨頭的,放下去煮一下就有魚可以吃了。































牛肉片,內可以無限點,吃完了再請店員送上來,店員很貼心的,看到你盤子空了會主動問

你要不要再加肉。












































最後是好喝的果汁,他的杯子很大杯,不用一直去裝涼A,裝一杯可以

好好的吃上一陣子。


最後,它的消費是300大洋。


從竹南火車站出來走到對面苗栗客運,搭5810或5806到六合國小

下車再走幾百公尺即可到達,但是我好像被晃點一班公車沒來。


吃完後我用走的到竹南火車站花了32分鐘左右,吃飽想要走一下

可以考慮。


地址:

苗栗縣頭份市東庄里18鄰東民路155號


2016年5月22日 星期日

[arduino] arduino 控制繼電器

繼電器是什麼,請參考這一篇 ,基本上繼電器有2組輸出,

1組是常沒有任何控制訊號輸入的狀態下會連通(常閉)。

另1組是有控制訊息輸入時,才會連通的(常開)。

至於那一組可能要看一下說明書才知道,繼電器種類很多。


手上這一個是單路繼電器,是常閉式,如果沒有控制訊號時,

是會一直導通的,DAT 為高電位時,則會斷路。



                                               


 繼電器的左右二邊的電路通常是分開的,左邊是控制用,像這顆控制端是DC 5V,

而右邊則可以接受DC 30V     ,AC 250V的能耐,所以可以用Arduino去控制電器。                                                                                                                                                                                   下圖是繼電器的運作方式

圖片來源 WIKI


簡單來說就是DAT腳位變成高電位後,電磁鉄會把原本斷開的路導通,或者是像我這顆

模組一樣,把原本導通的路弄成斷路。


接下來是我要作的範例,利用這一篇所提到的PIR(被動式人體紅外線感測模組),

來控制Relay的動作,搭配一顆LED,有人經過時LED就會滅掉,沒人時會亮著。

Arduino吃的是電腦USB供的電,而relay吃的則是9V電源供應器給的電,透過麵包板

電源模組轉成3.3V給LED吃,建議加個限流電阻,我這是偷懶,有燒壞LED風險。

PIR   Arduino 
-------------------
VCC    5V

GND   GND

OUT    D3



Relay   Arduino 
---------------------
VCC       3.3V

GND       GND

DAT         D13




LED 正極接麵包板VCC(3.3V),負極接Relay  輸出的+ ,

Relay輸出的-  接在麵包板GND。




程式碼

const int PIRSensor = 3;     // 紅外線動作感測器連接的腳位
const int relayPin =  13;      // LED 腳位

int sensorValue = 0;         // 紅外線動作感測器訊號變數

void setup() {
  pinMode(PIRSensor, INPUT);     
  pinMode(relayPin, OUTPUT);        
}

void loop(){
  // 讀取 PIR Sensor 的狀態
 
  sensorValue = digitalRead(PIRSensor);


  // 判斷 PIR Sensor 的狀態
  if (sensorValue == HIGH) {     
    digitalWrite(relayPin, HIGH);  // 有人,開燈
  } 
  else {
    digitalWrite(relayPin, LOW);   // 沒人,關燈
  }
}

執行結果





Relay運作時,可以很明顯聽到一個閉/開 路的聲音。


參考來源:

WIKI


[Arduino] 人體紅外線模組

                  

[教學]用Arduino控制110V的電器

2016年5月21日 星期六

[Arduino] 人體紅外線模組


簡介



Passive InRared Sensor (被動人體紅外線感測器 ,PIR) 是偵測人體所發出的紅外線模組。

和主動式的紅外線不同,主動式的會主動發射出紅外線,例如自動沖水的小便斗,

被動的是感測人所發出的紅外線,可以用在看看有沒有人偷偷進入你所要保護的區域。






























在上圖的右方有二個可以調整的旋鈕,如果覺得太敏感可以用小起子做調整。



接線


PIR                  arduino

VCC                 5V

OUT                  3

GND                GND


最後我們再插上一支LED在D13 與GND ,雖然板子上己經有D13LED,

但我想讓它明顯一點。



使用起來,發現會有一個小小的問題,也許可以透過調整旋鈕來試試看敏感度,

如果一直放在感應器前不動一段時間,似乎就不會被感應到。


參考資料:

http://coopermaa2nd.blogspot.tw/2011/03/arduino-pir-motion-sensor-led.html


http://yhhuang1966.blogspot.tw/2015/07/arduino-pir.html

[Electric imp] imp001使用Uart與Arduino溝通


前言



Electric imp 官網上有提供一個使用UART與Arduino溝通的例子,

小弟實作了一下,約略了一點程式碼。

imp001 與擴充版





接線

依照Electric Imp pin mux ,如果使用設定檔為 uart57 的話,Tx是pin5 , Rx是pin7 。

Pin Mux

Pinuart
1289
uart
57
uart
12
i2c
89
i2c
12
spi
257
spi
189
DACADCPWMPulse
Count
WakePTPG
Trigger
1CTSTXSCLSCLKYesYesYesYesYes
2RTSRXSDAMISOYesYes
5TXSCLKYesYesYesFor Pin 7
7RXMOSIYesYes
8TXSCLMOSIYesYesFor Pin 5 or 9
9RXSDAMISOYesYesFor Pin 2


The imp supports speeds of between 460 and 1,875,000 Baud on uart12 and uart57, rising to 920-3,750,000 Baud with uart1289. That’s a wide range of speeds; select one which the device you’re connecting will support. The most commonly used speeds are 9600 Baud and 115,200 Baud, which all three imp UARTs support.


arduino            imp001

Tx(D1)                 pin7

Rx(D0)                 pin5
GND                    GND




















































































程式碼


imp001

server.log("Device Started");

function arduinoData() {
    // Read the UART for data sent by Arduino to indicate the state of its LED.
    
    local b = arduino.read();
    while (b != -1) {
        // As long as UART read value is not -1, we're getting data
        local state = "Unknown";
        if (b == 0x10) state = "Off";
        if (b == 0x11) state = "On"
        server.log("LED: " + state);
        b = arduino.read();
    }
}

function blink(state) {
    // Write state (1 or 0) to the Arduino
    server.log("Setting LED to: " + state);
    arduino.write(state);
    imp.wakeup(1.0, function(){ blink(1 - state); });
}

// Alias UART to which Arduino is connected and configure UART
arduino <- hardware.uart57;
arduino.configure(9600, 8, PARITY_NONE, 1, NO_CTSRTS, arduinoData);

// Start blinking
blink(1);


blink(state)這個函式,每秒會傳送一次與上次相反的state值給arduino。


arduinoData()這個函式只付責讀取arduino送過來的值,並log印出狀態文字。

arduino


// Arduino device code

int led = 13;               // LED pin number

void setup() {
    Serial.begin(9600);     // Configure serial
    pinMode(led, OUTPUT);   // Configure LED pin
    digitalWrite(led, 0);   // Turn LED off
}

void loop() {
    int b = 0;

    // If there's data available
    if (Serial.available() > 0) {
        // Read a byte
        b = Serial.read();
        
        if (b == 0x00) {
            digitalWrite(led, LOW);
            Serial.write(0x10);
        } else if (b == 0x01) {
            digitalWrite(led, HIGH);
            Serial.write(0x11);
        }
    }
}
view raw



當arduino收到由Serial送過來的值時,若是0則將LED熄滅,並回送一個1的值給imp001,


若是收到1則日是點亮LED,並回傳0的值給imp001。




執行結果

    


如果你想要看到arduino實際收到的內容,你可以改用 SoftwareSerial 方式,


把原本的Serial留給電腦接USB看,程式碼如下

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX
int led = 13;  
void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
   pinMode(led, OUTPUT);   // Configure LED pin
    digitalWrite(led, 0);   // Turn LED off
 

  // set the data rate for the SoftwareSerial port
  mySerial.begin(9600);
 
}

void loop() { // run over and over
  int b=0;
  if (mySerial.available()>0) {
    //Serial.write(mySerial.read());
      b = mySerial.read();
        if (b == 0x00) {
            digitalWrite(led, LOW);
            mySerial.write(0x10);
        } else if (b == 0x01) {
            digitalWrite(led, HIGH);
            mySerial.write(0x11);
        }
        Serial.println(b);
  }
  if (Serial.available()) {
    mySerial.write(Serial.read());
  }
}

但你要把接角換一下,

imp001  arduino

pin7       D11

pin5       D10

此時就可以看序列埠中觀看收到的資料了



































參考資料:

https://electricimp.com/docs/resources/uart/

https://electricimp.com/docs/api/hardware/uart/configure/