2018年8月13日 星期一

Relay SDR-05VDC-SL繼電器模組

功能:利用SDR-05VDC-SL繼電器模組信號輸入腳位,適當給予HIGH或LOW,Relay模組輸出端RO接點與共用端點會有短路或開路動作,作為控制負載(LED&風扇)之電源開關用途。

材料:Arduino UNO V3 x1、SDR-05VDC-SL繼電器模組 x1、LED x1、Ω x1
技術規格:SRD-05VDC-SL-C
1 Channel Relay Module with Optocoupler H/L Level Triger
Build with high current relay SRD-05VDC-SL-C
Max AC - 10A 250V
Max DC - 10A 30V
IN Singal Input Voltage can be 0-5V
Input contacts: VCC GND IN

佈線圖:Ralay模組S腳位連接Arduino D2 Pin,LED與馬達正極連接於Ralay輸出端之NO腳位(+)及共用接點(-)。



線路圖:


DEMO:



程式碼:
int Relay = 2;  //Digital pin D2

void setup() {
  Serial.begin(9600);
  pinMode(Relay, OUTPUT);
}

void loop() {
  digitalWrite(Relay, HIGH);
  delay(700);
  digitalWrite(Relay, LOW);
  delay(2000);
}

2018年8月9日 星期四

NTC Themistor Module LM393 (Temperature up to 80 Degree Celsius) 數位溫度感測器模組


功能:溫度偵測,當到達一定溫度時點亮LED或啟動風扇馬達作為恆溫控制。

材料:Arduino UNO3 x1、LM393數位溫度傳感器模組、杜邦線
           LM393數位溫度傳感器模組,該NTC熱敏電阻模組具有NTC溫度傳感器,該傳感器僅提供數位輸出。溫度檢測值可通過電位計調節。它採用LM393的電壓比較器晶片,具有穩定的數位輸出信號和15mA的驅動能力。

技術規格:
    操作電壓: 3.3V DC to 5V DC
    輸出電流: 15mA
    輸出型態: Digital (HIGH OR LOW)
    溫度範圍: 20°C - 80°C

DEMO:



程式碼:
int Led = 13;                //設定LED腳位數位腳位13
int buttonpin = 2;         //感測器DO腳位至數位腳位2
int sensorState;            //設定變數sensorState

void setup()
{
   pinMode(Led, OUTPUT);       //設定腳位Pin 13為输出
   pinMode(buttonpin, INPUT);  //設定感測器為輸入模式
}

void loop()
{
   sensorState = digitalRead(buttonpin);//將感測器讀取值给sensorState
   if(sensorState == HIGH){           
      digitalWrite(Led, HIGH);  //LED亮點亮
   }else{
      digitalWrite(Led, LOW);   //LED息滅
   }
}

2018年8月8日 星期三

DHT-11 I2C溫溼度感測器

材料:Arduino UNO3 x1、DHT-11 溫濕度感測器 x1、杜邦線
佈線圖:
線路圖:
程式碼:使用載入模組的測試樣本即可,注意,data腳位連接Arduino 
                 digital pin 2。

  輸出結果:

2018年8月3日 星期五

LCD1602 I2C Liquid Crystal Displayer 液晶顯示器跑馬燈


材料:Arduino UNO3 x1、LCD 1602+I2C顯示器 x1、杜邦線

下載模組:LiquidCrystal_I2C模組,https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads/
下載後解壓所至Arduino IDE安裝路徑下的libraries\目錄下即可。

佈線圖:

線路圖:
           


程式碼:

#include <Wire.h> // Comes with Arduino IDE #include <LiquidCrystal_I2C.h> //設定LCD位址 LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address String str_Line_1 = "Hello, world!"; String str_Line_2 = "Have a nice day to you"; //整體文字閃爍功能函式 void blinkString(int num, int second){ for(int i = 1; i <= num; i++){ lcd.noDisplay(); delay(second); lcd.display(); delay(second); } return; } //向左向右逐字顯示及清除功能函式 void byCharDisplay(int turns){ for(int x=1; x<=turns; x++){ for (int i = 0; i < 16; i++){ //顯示行1內容 lcd.setCursor(i, 0); lcd.print(str_Line_1.substring(i, i+1)); //顯示行2內容 lcd.setCursor(16-i-1, 1); lcd.print(str_Line_2.substring(15-i, 16)); Serial.println(16-i-1); delay(80); } delay(1000); for (int i = 16; i > 0; i--){ //清除行1內容 lcd.setCursor(i-1, 0); lcd.print(" "); //清除行2內容 lcd.setCursor(16-i, 1); lcd.print(" "); delay(80); } delay(700); } } void setup(){ Serial.begin(9600); // 開啟LCD背光: lcd.begin(16, 2); } void loop(){ /* ------ 字串閃爍 ------*/ lcd.setCursor(0, 0); lcd.print(str_Line_1.substring(0,16)); lcd.setCursor(0, 1); lcd.print(str_Line_2.substring(0,16)); delay(1000); blinkString(3, 350); delay(1000); /* ------ L1向左、L2向右移動 ------*/ int move_length = max(str_Line_1.length(), 16); for (int i = 0; i < move_length+1; i++){ lcd.setCursor(0, 0); //防止Line1字串超長折行 lcd.print(str_Line_1.substring(i, i+16)); //防止Line2字串超長折行 if(i >= 16){ lcd.setCursor(16, 1); }else{ lcd.setCursor(i, 1); } lcd.print(str_Line_2.substring(0, 16)); delay(300); lcd.clear(); } /* ------ L1向右、L2向左移動顯示到位置(0,0) ------*/ for (int i = str_Line_1.length(); i >= 0; i--){ lcd.clear(); lcd.setCursor(0, 0); lcd.print(str_Line_1.substring(i)); //防止Line2字串超長折行 if ( i > 16){ lcd.setCursor(16, 1); }else{ lcd.setCursor(i, 1); } lcd.print(str_Line_2.substring(0, 16)); delay(300); lcd.clear(); } /* ------ 由位置(0, 0),L2向右、L1向左移動並顯示到尾端 ------*/ move_length = max(str_Line_2.length(), 16); for (int i = 0; i < move_length; i++){ //防止Line1字串超長折行 if(i >= 16){ lcd.setCursor(16, 1); }else{ lcd.setCursor(i, 0); } lcd.print(str_Line_1.substring(0, 16)); lcd.setCursor(0, 1); lcd.print(str_Line_2.substring(i, i+16)); delay(300); lcd.clear(); } delay(1000); //特效1顯示2次 byCharDisplay(2); delay(1000); }

2017年12月30日 星期六

複製、備份樹莓派主板SD卡開機片並進行容量瘦身,SD-32G to SD-16G

一、安裝所需工具程式
sudo apt-get update

sudo apt-get install dosfstools dump parted kpartx rsync

環境說明與準備:
Raspberry Pi 3 Linux raspberrypi 4.4.21-v7+ x1
SD容量:32G x1 、16Gx1
外接式USB 16G

二、進行備份
        進行備份工作前須先確認本機已使用容量是否超過總容量的50%,如超過時必須將備份空白檔案產生於外部磁碟空間,否則備份過程將會失敗,本範例是預設本機磁區使用空間已超過50%為示範。

確認已使用容量  (root + boot)
df -lh





先掛載外部空間並切換至掛載目錄後再進行產生空白檔案
sudo mount /dev/sda1 /mnt/pi
cd /mnt/pi

產生空白image檔案,大小為9.5G(需大於已使用空間)
sudo dd if=/dev/zero of=raspberrypi.img bs=1M count=9500
確認Boot & Root磁區大小 
sudo fdisk -l /dev/mmcblk0





分割虛擬磁碟
第一磁區為boot,格式FAT32,由sector 8192開始到sector 137215 第二磁區為root,格式EXT4,由sector 137215開始到空白img結尾。
sudo parted raspberrypi.img --script -- mklabel msdos
sudo parted raspberrypi.img --script -- mkpart primary fat32 8192s 137215s
sudo parted raspberrypi.img --script -- mkpart primary ext4 137216s -1

掛載虛擬磁碟
loopdevice=`sudo losetup -f --show raspberrypi.img`
device=`sudo kpartx -va $loopdevice | sed -E 's/.*(loop[0-9])p.*/\1/g' | head -1`
device="/dev/mapper/${device}"
partBoot="${device}p1"
partRoot="${device}p2"

格式化虛擬磁碟
sudo mkfs.vfat $partBoot
sudo mkfs.ext4 $partRoot

開始複製檔案
sudo mount -t vfat $partBoot /media
sudo cp -rfp /boot/* /media/
sudo umount /media

跳過raspberry.img檔案不備份
sudo chattr +d raspberrypi.img
sudo mount -t ext4 $partRoot /media/
cd /media

sudo rsync -aP --exclude="raspberrypi.img" --exclude=/media/* --exclude=/sys/* --exclude=/proc/*  --exclude=/tmp/* / ./
cd
sudo umount /media

卸載虛擬磁碟
sudo kpartx -d $loopdevice
sudo losetup -d $loopdevice

三、回存檔案至SD卡
完成後將raspberrypi.img檔案透過Win32 Disk Imager工具寫入16G SD卡。

寫入16G SD卡的容量狀況,總容量僅為9G。


        因為此備份檔案僅有9.5G,寫入16G的SD卡後,本機總容量會呈現為9.5G,此時必須用raspi-config工具中的Expand Filesystem功能,將空間況展為實際空間16G。


況展後總容量回復為16G之空間檢視。








2017年12月20日 星期三

ESXi 免費版本,客體作業系統移機作業

 因為是免費版並無Clone功能,只能手動方式進行移機作業。
 範例環境:
        舊ESXi主機IP:192.168.0.10
        新ESXi主機IP:192.168.0.11
        遷移之客體作業系統:Windows Server 2008

一、檔案複製作業:
   . 新舊主機開啟SSH服務。

   . putty root@192.168.0.10

   . 切換到虛擬主機作業系統存放路徑
      cd /vmfs/vloume/data1
      scp  -r windows2k8  root@192.168.0.11:/vmfs/volume/datastore

二、新主機上進行【登錄虛擬機器】作業
   . 開啟瀏覽器連線Web管理介面,並輸入管理者帳密
     https://192.168.0.11/


. 登錄虛擬機器步驟,
  ①選擇資料存放磁區
  ②點選【資料存放區瀏覽器】功能
  ③選擇複製之作業系統的目錄名稱
  ④選擇虛擬主機的主要檔案副檔名為.vmx】,按滑鼠選擇【登錄虛擬機器】  


. 新增後於虛擬機器清單列表中多了剛剛新增虛擬機器名稱。


.點選新增虛擬機器名稱【Windows2008】後畫面會顯示記憶體、CPU等等機器環境參數。



. 點選作業系統上一步驟畫面左上方視窗圖檔,會彈出CONSOLE視窗,顯示運作中系統的畫面,之後就可以正常操作虛擬主機。


. 送出CTRL+ALT+DELETE 進行登入作業方法
①遠端控制台最上方【按滑鼠右鍵】
②客體作業系統 -> 傳送按鍵 -> Ctrl+Alt+Deletee


.登入成功顯示桌面



2017年12月19日 星期二

VMware ESXi 6.x Client 連線

虛擬主機雖可以透過瀏覽器主控台進行操作,但筆者第一次使用時發,在現尚未安裝[VMware Tools]時滑鼠一直無法於瀏覽器主控台中正常操作並控制。

建議先安裝遠端操控軟體介面進到客體作業系統,並於客體作業系統中安裝VMware Tools後即可正常操作瀏覽器主控臺介面。

一、下載並安裝VMRC,於Web管理介面選擇->虛擬機器(Ex:win7_64)按滑鼠右鍵
     ->主控台->下載VMRC,並執行安裝。



二、由VMRC操作客體作業系統,於Web管理介面選擇->虛擬機器(Ex:win7_64)按滑鼠右鍵->主控台->啟動遠端主控台->成功連線作業系統。


       


三、在安裝VMware Tools,選擇上方功能項 VMRC->管理->安裝VMware Toosl。


     如無法自動啟動安裝作業,可自行至作業系統中的CD-ROM手動安裝工具程式。

四、當上述步驟完成後即可於Web管理介面,選定作業系統透由瀏覽器主控台進行客體作業系統操作。