วันเสาร์ที่ 14 กันยายน พ.ศ. 2556

Raspberry Pi 3G Wifi Hotspot

Raspberry Pi+3G Aircard+Wifi Dongle = RPi 3G Wifi Hotspot

        หลายคนมีโทรศัพท์ที่สามารถทำตัวเป็น Wifi Hotspot ได้ แต่การที่จะใช้โทรศัพท์มาทำเป็น Hotspot นั้นคงจะทำให้แบตเสื่อมในเร็ววันแน่นอน ยิ่งถ้าหากเป็นเครื่องโทรศัพท์ที่เป็นรุ่นที่ราคาแพงๆ ด้วยแล้ว การที่จะเปิดเป็น Hotspot ทิ้งไว้ทั้งวันทั้งคืน คงไม่ใช่เรื่องดีแน่ แต่ถ้าหากใครที่จะลงทุนซื้อโทรศัพท์เครื่องถูกๆ ที่สามารถเปิดเป็น Wifi Hotspot ไว้เพื่อเป็นตัวปล่อยสัญญาณ Wifi ก็ยังคงต้องมีปัญหาเรื่องแบตเสื่อมอยู่ดี ถ้าซื้อมาเพื่อที่จะใช้เป็น Hotspot โดยตรงแล้วอันนี้ก็ไม่ว่ากันครับ
        นอกจากนี้แล้ว ถ้าหากใครมี Router Internet ที่บ้าน ก็จะมีตัวกระจายสัญญาณ Wifi ในตัว
อยู่แล้ว แต่ถ้าหากเป็น Router รุ่นเก่าที่มีเฉพาะสาย Lan ก็สามารถใช้ Raspbery Pi 3G Wifi Hotspot ตัวนี้ได้ หรือจะประยุกต์เป็น Proxy Server ไปเลยก็ได้ครับ
       ก่อนอื่น เริ่มจากเตรียมอุปกรณ์ที่ต้องใช้ให้พร้อมกันก่อน ซึ่งมีรายการดังนี้ครับ

                  1. Raspberry Pi พร้อมลง Raspbian (No Enable Desktop)
                  2. Wifi Dongle
                  3. 3G หรือ 4G Aircard
                  4. Internet SIM (ค่ายไหนก็ได้ ที่สมัครและเปิดบริการ 3G ไว้แล้ว)
                  5. 5V 2A Adapter (จ่ายไฟให้กับ Raspberry Pi อาจจะใช้ Power Bank ก็ได้นะครับ)
                  6. USB HUB (เอาไว้ต่อ Keyboard ให้กับ Raspberry Pi หรืออาจติดตั้งผ่าน SSH ก็ได้)



        จากนั้นก็ทำการประกอบชิ้นส่วนต่างๆ ให้ได้ตามรูปเลยครับ



        เมื่อต่ออุปกรณ์เสร็จเรียบร้อยแล้ว ก็ทำการจ่ายไฟให้กับ Raspberry Pi ของเรากันได้เลยครับ
ให้ระบบทำงานไปจนถึงหน้า Login จากนั้นก็ทำการ Login เข้าระบบตามรหัสผ่านที่ตั้งเอาไว้ตอนติดตั้ง Raspbian (ย้อนกลับไปดูรายละเอียดบทความแรก)
        หลังจากนั้นทำการเชื่อมต่อ Internet กับบอร์ดเพื่อให้สามารถทำการติดตั้งโปรแกรมให้กับ Raspberry Pi เพื่อที่จะทำให้ Wifi Dongle กลายเป็น Access Point และ ติดตั้งโปรแกรม Sakis3g เพื่อใช้ Internet จาก Aircard
        ในที่นี้ขอต่อ Internet ทาง Wifi Dongle ที่ใช้ apt-get ในการ Install โดยแก้ไขไฟล์ตามขั้นตอนดังนี้
        เข้าไปแก้ไขไฟล์ interfaces โดยใช้คำสั่ง
 
        sudo nano /etc/network/interfaces

        จากนั้นแก้ไฟล์ตามนี้เลยครับ

ในกรณีที่ Access Point เป็น WPA

        auto wlan0
        iface lo inet loopback
        iface wlan0 inet dhcp
        wpa-ssid <ชื่อ access point ที่เชื่อมต่อ Internet>
        wpa-psk <รหัสผ่านของ access point>

ในกรณีที่ Access Point เป็น WEP

        auto wlan0
        iface lo inet loopback
        iface wlan0 inet dhcp
        wireless-essid <ชื่อ access point ที่เชื่อมต่อ Internet>
        wireless-key s:<รหัสผ่านของ access point>

       หลังจากนั้นก็กด Ctrl+O (บันทึก) และ Ctrl+X (ออกจากโปรแกรม) เสร็จขั้นตอนนี้แล้วก็ทำการ restart network โดยการใช้คำสั่ง

        sudo /etc/init.d/networking restart

       เมื่อเสร็จขั้นตอนนี้แล้ว ก็จะสามารถใช้งาน Internet ได้แล้วครับ (ขั้นตอนข้างต้นเป็นการติดตั้ง Wifi Dongle ให้ Raspberry Pi รู้จักและเชื่อมต่อระบบเครือข่าย ถ้าหากใช้สาย Lan ไฟล์ interfaces
ก็ไม่ต้องทำการแก้ไข)

       จากนั้นให้ทำการดาวน์โหลดไฟล์ sakis3g.tar.gz มาเพื่อทำการติดตั้งโดยใช้คำสั่ง



       จะได้ไฟล์ sakis3g.tar.gz ที่ directory ที่ใช้คำสั่งนั้น หากโหลดไฟล์ได้สำเร็จจะแสดงหน้าจอดังนี้



        เสร็จแล้วให้ทำการแตกไฟล์ โดยใช้คำสั่ง

     


        ก่อนที่จะทำการ Connect กับ Aircard นั้น จะต้องติดตั้ง usb_modeswitch ให้กับ Raspberry Pi
กันก่อน ซึ่งจะทำให้ Aircard สามารถสื่อสารได้ภายใต้ชื่อ ttyUSB โดยใช้คำสั่งดังนี้

     


        ตอบ Y หลังจากนั้นก็รอให้คำสั่งนั้นประมวลผลจนเสร็จจะได้หน้าจอดังนี้


        จากนั้นให้ reboot Raspberry Pi อีกครั้ง ด้วยคำสั่ง sudo reboot

       เมื่อเข้าสู่ระบบอีกรอบ ทำการติดตั้ง ppp (point to point protocol) ให้กับ Raspberry Pi โดยใช้คำสั่ง


        จากนั้นให้ตอบ Y เพื่อทำการติดตั้ง หากติดตั้งเสร็จเรียบร้อยจะแสดงข้อความดังรูป



       เสร็จขั้นตอนการติดตั้งแล้ว เราจะทำการ Connect 3G อัตโนมัติเมื่อ Raspberry Pi เริ่มทำงานกัน
โดยก่อนอื่น เราจะนำคำสั่ง sakis3g ไปไว้ยัง /usr/sbin เพื่อให้สามารถเรียกใช้ได้ทุกที่โดยไม่ต้องระบุ path โดยใช้คำสั่งดังนี้



        จากนั้นเราจะทำการ connect 3G ที่ startup โดยจะต้องไปแก้ไฟล์ /etc/rc.local โดยเพิ่มคำสั่งของ sakis3g พร้อม parameter ดังนี้

      แก้ไฟล์ตามรูปด้านล่าง โดย APN ของ AIS = internet, DTAC = www.dtac.co.th,
TRUE = hinternet ส่วน user และ pass ตั้งเป็นอะไรก็ได้ (ในที่นี้เป็นชื่อเครือข่าย)



       เมื่อทำการแก้ไขเสร็จเรียบร้อยแล้ว ให้บันทึกและออกจาก editor ได้เลยครับ จากนั้นเราจะมาทำการตั้งค่า Wifi Dongle ของเราให้สามารถทำตัวเป็น Hotspot โดยมีคำสั่งดังนี้
   

        จากนั้นตอบ Y เมื่อ install เสร็จเรียบร้อยแล้วจะมีหน้าจอดังนี้


        จากนั้นทำการแก้ไขไฟล์ /etc/default/udhcpd เพื่อเปิดการทำงานของ dhcp ดังนี้


       เปลี่ยน ip ของ Wifi ให้เป็น static เพื่อเป็น ip เริ่มต้นในการแจก ip โดยแก้ไขไฟล์ /etc/network/interfaces ให้เป็นดังนี้


        จากนั้นให้ทำการแก้ไขไฟล์ /etc/udhcpd.conf โดยกำหนดค่าต่างๆ ดังนี้



 



        ต่อไปก็ทำการแก้ไขไฟล์ /etc/hostapd/hostapd.conf (หากไม่มีให้สร้าง) โดยกำหนดค่าดังนี้


        สามารถตั้ง ssid ได้ตามใจชอบ และเปลี่ยน <yourpasskey> ให้เป็น passkey ของผู้อ่านเอง
        จากนั้นทำการตั้ง hostapd ให้อ่านค่าจาก hostapd.conf โดยแก้ไขไฟล์ /etc/default/hostapd ดังนี้



        หลังจากนั้นทำการตั้งค่า ip forward โดยแก้ไขไฟล์ /etc/sysctl.conf ให้เป็นค่าดังนี้



        เมื่อเสร็จขั้นตอน forward ip แล้ว ให้ตั้งค่า NAT (Network Address Translation) ดังนี้ (หากพิมพ์คำสั่งแล้วเกิด error ขึ้น ให้ใช้คำสั่ง sudo rpi-update แล้ว reboot ก่อนหนึ่งรอบ)

      เพื่อให้ตอน reboot เครื่องแล้วค่าไม่หายไป ทำการบันทึกค่า iptables ลงไฟล์ด้วยคำสั่ง

      เพิ่มคำสั่ง iptable-restore เพื่อทำการตั้งค่าที่บันทึกไว้ เมื่อ Network เริ่มทำงาน ลงในไฟล์ /etc/network/interfaces ดังนี้


        ขั้นตอนสุดท้าย เปิดการทำงานของ hostapd และ udhcpd เมื่อมีการเริ่มระบบ โดยใช้คำสั่งดังนี้

         จากนั้นทำการ reboot Raspberry Pi ด้วยคำสั่ง sudo reboot เท่านี้ก็ได้ Wifi Hotspot ไว้ใช้งานแล้วหล่ะครับ อาจจะมี Power Bank ซักตัว จ่ายไฟให้ จับ RPI เข้ากล่องเสียบ USB เฉพาะ Wifi Dongle และ 3G Aircard ก็เก๋ไปอีกแบบ ว่างๆ ลองทำเล่นดูนะครับ
        ใครมีโปรเจคที่น่าสนใจก็สามารถแชร์ความรู้กันทาง gtalk หรือทางเมลล์ได้นะครับ
olekhanchai@gmail.com หรือสนใจอุปกรณ์สามารถเข้าสั่งซื้อได้ในเว็บ http://www.hobbyembshop.biz หรือสินค้าโปรโมชั่นที่ https://www.facebook.com/hobbyembedded  
ไว้เจอกันคราวหน้าครับ



อ้างอิง:  http://elinux.org/RPI-Wireless-Hotspot



        

วันอาทิตย์ที่ 18 สิงหาคม พ.ศ. 2556

วงจรตรวจจับโลหะ Arduino + Inductive Proximity Sensor

Arduino + Inductive Proximity Sensor

         ก่อนที่จะลงมือทำเครื่องนับจำนวนโลหะโดยใช้ Arduino นั้น เรามาทำความรู้จักกับ
Proximity Sensor หรือเรียกอีกชื่อว่า Proximity Switch กันก่อนนะครับในที่นี้จะกล่าวถึง
Inductive Proximity Sensor  ซึ่งใช้หลักการเหนี่ยวนำวัตถุที่จะทำการตรวจสอบ(โลหะที่สามารถเหนี่ยวนำได้) ในสภาวะที่ยังไม่มีการเหนี่ยวนำ ภาค Output จะอยู่ในสภาวะ Off และถ้าหากเกิดการเหนี่ยวนำขึ้นก็จะทำให้ภาค Output อยู่ในสภาวะ On ซึ่งสภาวะ On/Off จะขึ้นอยู่กับ Sensor แต่ละตัวซึ่งอาจจะมีค่าเริ่มต้นที่แตกต่างกันออกไป

        จากหลักการข้างต้น เราจะมาทำอุปกรณ์ในการนับจำนวน โลหะซึ่งจะต้องมีรายการอุปกรณ์ดังนี้

                1. Arduino UNO ใช้เป็นตัวประมวลผล
                2. Inductive Proximity Sensor
                3. 7 Segment 4 Digit (TOF-3461BMB-B)
                4. Resistor 4.7K ohms
        จากนั้นทำการประกอบวงจรให้ได้ดังรูปเลยครับ  

        

        จากวงจรด้านบนทำเป็น Shield ให้กับ Arduino พร้อมติดหลอดแสดงผล
7 Segment 4 Digit จะได้ดังรูปด้านล่างนี้ครับ



        เมื่อได้วงจรดังกล่าวแล้ว เราก็มาเขียนโค๊ดใน Arduino กัน  ตามข้างล่างนี้เลยครับ

// Assign Pin of 7 Segment 4 Digit
int segA = A1;  //Display pin 11
int segB = 3;   //Display pin 7
int segC = 4;   //Display pin 4
int segD = 5;   //Display pin 2
int segE = A0;  //Display pin 1
int segF = 7;   //Display pin 10
int segG = 8;   //Display pin 5

int digit1 = 11; //Display pin 12
int digit2 = 10; //Display pin 9
int digit3 = 9;  //Display pin 8
int digit4 = 6;  //Display pin 6

// Assign Pin of Proximity
int prox = A5;   //Proximity Sensor

// Initial counter & value;
long int counter = 0;
int beforeState = 0;
int value = 0;

void setup() {               
  pinMode(segA, OUTPUT);
  pinMode(segB, OUTPUT);
  pinMode(segC, OUTPUT);
  pinMode(segD, OUTPUT);
  pinMode(segE, OUTPUT);
  pinMode(segF, OUTPUT);
  pinMode(segG, OUTPUT);

  pinMode(digit1, OUTPUT);
  pinMode(digit2, OUTPUT);
  pinMode(digit3, OUTPUT);
  pinMode(digit4, OUTPUT);

  pinMode(prox, INPUT);
}

void loop() {
  value = digitalRead(prox);

  // Prevent Proximity hold on object
  if (beforeState != value && value == 0) {
    counter++;
  }
  if (value == 0) {
    beforeState = 0;   
  } else {
    beforeState = 1;
  }

  // Display Counter
  printNum(counter);
}

// Display Number
void printNum(int num) {
  for (int digit = 4 ; digit > 0 ; digit--) {
    switch (digit) {
    case 1:
      digitalWrite(digit1, HIGH);
      break;
    case 2:
      digitalWrite(digit2, HIGH);
      break;
    case 3:
      digitalWrite(digit3, HIGH);
      break;
    case 4:
      digitalWrite(digit4, HIGH);
      break;
    }

    dispNum(num % 10);
    num /= 10;

    delayMicroseconds(500);       
   
    // Turn off digit between loop
   
    digitalWrite(digit1, LOW);
    digitalWrite(digit2, LOW);
    digitalWrite(digit3, LOW);
    digitalWrite(digit4, LOW); 
    digitalWrite(segA, HIGH);
    digitalWrite(segB, HIGH);
    digitalWrite(segC, HIGH);
    digitalWrite(segD, HIGH);
    digitalWrite(segE, HIGH);
    digitalWrite(segF, HIGH);
    digitalWrite(segG, HIGH);
  }
}

// Display digit
void dispNum(int digit) {
  switch (digit) {
  case 0:
    digitalWrite(segA, LOW);
    digitalWrite(segB, LOW);
    digitalWrite(segC, LOW);
    digitalWrite(segD, LOW);
    digitalWrite(segE, LOW);
    digitalWrite(segF, LOW);
    digitalWrite(segG, HIGH);
    break;
  case 1:
    digitalWrite(segA, HIGH);
    digitalWrite(segB, LOW);
    digitalWrite(segC, LOW);
    digitalWrite(segD, HIGH);
    digitalWrite(segE, HIGH);
    digitalWrite(segF, HIGH);
    digitalWrite(segG, HIGH);
    break;
  case 2:
    digitalWrite(segA, LOW);
    digitalWrite(segB, LOW);
    digitalWrite(segC, HIGH);
    digitalWrite(segD, LOW);
    digitalWrite(segE, LOW);
    digitalWrite(segF, HIGH);
    digitalWrite(segG, LOW);
    break;
  case 3:
    digitalWrite(segA, LOW);
    digitalWrite(segB, LOW);
    digitalWrite(segC, LOW);
    digitalWrite(segD, LOW);
    digitalWrite(segE, HIGH);
    digitalWrite(segF, HIGH);
    digitalWrite(segG, LOW);
    break;
  case 4:
    digitalWrite(segA, HIGH);
    digitalWrite(segB, LOW);
    digitalWrite(segC, LOW);
    digitalWrite(segD, HIGH);
    digitalWrite(segE, HIGH);
    digitalWrite(segF, LOW);
    digitalWrite(segG, LOW);
    break;
  case 5:
    digitalWrite(segA, LOW);
    digitalWrite(segB, HIGH);
    digitalWrite(segC, LOW);
    digitalWrite(segD, LOW);
    digitalWrite(segE, HIGH);
    digitalWrite(segF, LOW);
    digitalWrite(segG, LOW);
    break;
  case 6:
    digitalWrite(segA, LOW);
    digitalWrite(segB, HIGH);
    digitalWrite(segC, LOW);
    digitalWrite(segD, LOW);
    digitalWrite(segE, LOW);
    digitalWrite(segF, LOW);
    digitalWrite(segG, LOW);
    break;
  case 7:
    digitalWrite(segA, LOW);
    digitalWrite(segB, LOW);
    digitalWrite(segC, LOW);
    digitalWrite(segD, HIGH);
    digitalWrite(segE, HIGH);
    digitalWrite(segF, HIGH);
    digitalWrite(segG, HIGH);
    break;
  case 8:
    digitalWrite(segA, LOW);
    digitalWrite(segB, LOW);
    digitalWrite(segC, LOW);
    digitalWrite(segD, LOW);
    digitalWrite(segE, LOW);
    digitalWrite(segF, LOW);
    digitalWrite(segG, LOW);
    break;
  case 9:
    digitalWrite(segA, LOW);
    digitalWrite(segB, LOW);
    digitalWrite(segC, LOW);
    digitalWrite(segD, LOW);
    digitalWrite(segE, HIGH);
    digitalWrite(segF, LOW);
    digitalWrite(segG, LOW);
    break;
  }
}

         เมื่อเขียนโค๊ดเสร็จก็ทำการ Upload เข้าไปยัง Arduino UNO กันได้เลย เพียงเท่านี้เราก็ได้เครื่องนับโลหะ ซึ่งสามารถนำไปประยุกต์ได้หลากหลายมาก อาจจะใช้ในการนับจำนวนเหรียญหรือโลหะอื่นๆ ที่ผ่าน Proximity หรือนับจำนวนรอบของการหมุน หรือแม้กระทั่งคำนวณความเร็วในการหมุน (เพิ่มโค๊ดในส่วนของการคำนวณหาระยะทางและความเร็ว) ลองประยุกต์กันดูนะครับ
        ใครมีโปรเจคที่น่าสนใจก็สามารถแชร์ความรู้กันทาง gtalk หรือทางเมลล์ได้นะครับ
olekhanchai@gmail.com หรือสนใจอุปกรณ์สามารถเข้าสั่งซื้อได้ในเว็บ http://www.hobbyembshop.biz หรือสินค้าโปรโมชั่นที่ https://www.facebook.com/hobbyembedded  
        ขอให้สนุกกันการประยุกต์ใช้งานครับ...

วันอาทิตย์ที่ 28 กรกฎาคม พ.ศ. 2556

Qt + Raspberry Pi = QtonPi

Qt + Raspberry Pi = QtonPi

        ถ้ากล่าวถึง Opensource C++ ที่มี GUI สร้างหน้าตาได้คล้ายๆ กับ Visual C++ หลายคนคงจะนึกถึง Qt ถูกพัฒนาโดย Nokia ซึ่งหลายๆ คนคงคุ้นเคยกันมาแล้ว เพราะว่าสามารถใช้งานได้หลาย Platform นอกจากนี้ยังมี QML ที่ง่ายต่อการพัฒนาอีกด้วย รายละเอียดเพิ่มเติมสามารถเข้าไปศึกษาเพิ่มเติมได้ที่ http://qt-project.org/doc/ และดาวน์โหลดไปใช้กันฟรีๆ ได้เลยครับ

        วันนี้ก็เลยจะจับ Qt ลงไปใน Raspberry Pi ซึ่งทรัพยากรของ Raspberry Pi นั้นเพียงพอต่อความต้องการของ Qt สามารถรันได้ผลลัพธ์เป็นที่น่าพอใจกันเลยทีเดียว 
        
        ก่อนที่จะเริ่มต้นลง Qt กันนั้นก็ต้องเตรียมอุปกรณ์ให้พร้อมกันก่อน โดยจะต้องมี Raspberry Pi
ที่ลงระบบปฏิบัติการ Raspbian ในโหมด Desktop พร้อมทั้งสามารถเชื่อมต่อ Internet และใช้คำสั่ง apt-get ได้
    
        จากนั้น ก็ทำตามขั้นตอนดังนี้ได้เลยครับ

        sudo apt-get install qtcreator

        หลังจากที่พิมพ์คำสั่งไปเรียบร้อยแล้ว จะแสดงข้อความเพื่อยืนยันการ install
ให้ตอบ Yes หรือ กด Enter ซึ่งหน้าจอจะแสดงประมาณนี้ครับ


        เมื่อทำการ Install เสร็จเรียบร้อยแล้ว ก็จะแสดงหน้าจอตามรูปข้างล่าง


        ทีนี้เราก็จะมาลองเล่นโปรแกรม Qt ที่เราลงเสร็จแล้วกันเลยครับ ซึ่งในที่นี้ จะรันด้วย

        sudo qtcreator

        ซึ่ง Qt Creator คือ IDE ที่ใช้ในการเขียน Qt นั่นเอง หน้าตาของเจ้า Qt Creator มีรูปร่างดังรูปข้างล่างเลยครับ


        อ้าว... ถ้ามันลงง่ายขนาดนี้แล้วจะมาเขียนบทความทำไมให้เสียเวลาหล่ะเนี่ย !!!

        จริงๆ แล้วเจ้า Qt Creator ใน Raspberry Pi ไม่ได้ทำมาให้สำเร็จพร้อมใช้งานหรอกครับ
จะต้องมีการตั้งค่า Qt Version และ Tool Chain ให้มันเสียก่อน ถึงจะใช้งานได้ ซึ่งจะมีขั้นตอนดังนี้ครับ

        เลือก Tools จากนั้นเลือกที่ Options... จะปรากฏหน้าจอตามรูปข้างล่างขึ้นมา


        จากนั้นคลิกที่ Tab Build & Run เลือก Tool Chains จะได้หน้าจอดังรูปเลยครับ

  
        ณ ตอนนี้ Qt Creator ของเรายังไม่ได้เพิ่ม Tool Chain ไดๆ ลงไปใน IDE ในตอนนี้เราจะเพิ่ม g++4.6 เข้าไปเป็น Tool Chain เพิ่มด้วยการกด Add แล้วเลือก GCC
       
         ในช่อง Compiler path ให้พิมพ์ /usr/bin/arm-linux-gnueabihf-g++-4.6
         ช่อง Debugger ให้พิมพ์ /usr/bin/gdb  
         ตามรูปข้างล่างเลยครับ
        เมื่อเสร็จขั้นตอนนี้แล้วก็กด Apply เพื่อทำการนำค่าที่กำหนดไปปรับใช้งาน จากนั้น
ไปยัง Tab Qt Versions
        ในช่อง qmake location ให้ Browse... แล้วเลือกไฟล์ /usr/binqmake-qt4 (ถ้าหากไม่เคยลง gcc version อื่นมาก่อน default จะเป็น qmake-qt4) 
        จากนั้นคลิกที่ OK ก็ถือว่า Qt Creator ของเรานั้นสามารถใช้งานได้แล้วครับ 

        หลังจากขั้นตอนนี้แล้ว ก็สามารถสร้าง Project พร้อมทั้งสามารถ Compile และ Run โปรเจคที่สร้างจาก Qt Creator ได้แล้วครับ

        ใครมีโปรเจคที่น่าสนใจก็สามารถแชร์ความรู้กันทาง gtalk หรือทางเมลล์ได้นะครับ
olekhanchai@gmail.com หรือสนใจอุปกรณ์สามารถเข้าสั่งซื้อได้ในเว็บ http://www.hobbyembshop.biz หรือสินค้าโปรโมชั่นที่ https://www.facebook.com/hobbyembedded  


วันศุกร์ที่ 28 มิถุนายน พ.ศ. 2556

ติดตั้ง LAMP ให้กับ Raspberry Pi กันเถอะ

ติดตั้ง LAMP ให้กับ Raspberry Pi กันเถอะ

        หลังจากที่ได้ลองเขียนกระทู้เกี่ยวกับอุปกรณ์ที่ผมอยากจะศึกษามา เห็นได้ชัดว่ากระแสของ Raspbery Pi มาแรงมาก วันนี้ผมก็เลยหยิบเอาวิธีการติดตั้ง Linux Apache Mysql Php (LAMP)
ใน Raspberry Pi มาฝากกันครับ

        เริ่มจากผมถือว่าทุกคนติดตั้ง Raspbian และสามารถติดต่อกับระบบ Network ออก Internet ได้
และสามารถใช้คำสั่ง apt-get ได้อยู่แล้วนะครับ โดยผมจะติดตั้งไปทีละตัวอักษรตามลำดับดังนี้ครับ

 

Apache

        Apache คือ Apache Web Server ถือได้ว่าเป็นส่วนที่ติดตั้งไว้เพื่อทำให้ Raspberry Pi กลายเป็น Web Server โดยทำให้ Client สามารถติดต่อ Raspberry Pi ผ่านทาง Protocol HTTP ได้
โดยวิธีการติดตั้ง Apache Server ใน Raspberry Pi สามารถทำได้ด้วยคำสั่งนี้ครับ

        sudo apt-get install apache2

        หน้าจอการติดตั้ง Apache Web Server จะขึ้นข้อความเพื่อแจ้งการเปลี่ยนแปลงที่จะเกิดขึ้นหลังจากที่ลงโปรแกรมไปแล้ว ตามรูปครับ

        จากนั้นให้ตอบ Y หรือ y (กด Enter เลือก default Y) ระบบก็จะทำการติดตั้ง Apache ใน Raspbianซึ่งเมื่อดำเนินการเสร็จเรียบร้อยแล้วจะมีหน้าตาประมาณนี้ครับ

 
        เมื่อติดตั้งเสร็จเรียบร้อยแล้ว ระบบจะทำการ Start Service ของ apache ให้โดยอัตโนมัติ

        จากนั้นเราก็จะมาทำการทดสอบกันว่า Web Server ที่เราติดตั้งมานั้นใช้งานได้จริงหรือเปล่า
โดยเข้าไปที่ Browser ที่มากับ Raspbery Pi ซึ่งมีชื่อว่า Midori หรือ จะเข้าผ่านทาง URL ของ Browser ที่ต่างเครื่องกันก็ได้นะครับ ในที่นี้ IP ของ Raspbery Pi คือ 192.168.164.102
        ทดสอบด้วยการพิมพ์ http://192.168.164.102 ใน Browser ถ้าหากใช้งานได้จะขึ้นหน้าจอตามรูปด้านล่างเลยครับ

Mysql

        Mysql คือ Mysql Server ซึ่งเป็นระบบฐานข้อมูลประเภทหนึ่ง โดยที่สามารถที่จะติดต่อสื่อสารและบันทึกข้อมูลลงในฐานข้อมูลนี้ด้วยคำสั่ง SQL แต่การติดตั้ง Mysql Server จะต้องอยู่ในสิทธิที่จะสร้างไฟล์และแก้ไขไฟล์ได้  จึงจะทำการติดตั้งสมบูรณ์ โดยจะต้องใช้สิทธิ์ root ในการติดตั้งโดยใช้คำสั่งดังนี้

        sudo bash

        หลังจากที่สั่งคำสั่งนี้แล้ว Raspberry Pi จะเปลี่ยนสิทธิ์ของผู้ใช้งานเป็น root โดย prompt ของระบบปฏิบัติการจะเปลี่ยนไปมีหน้าตาประมาณนี้ครับ

 
        ลำดับถัดไปเราจะทำการติดตั้ง Mysql Server ให้กับ Raspberry Pi โดยใช้คำสั่งนี้ครับ

        sudo apt-get install mysql-server

        จากนั้นระบบจะแจ้งการเปลี่ยนแปลงของไฟล์ที่จะเกิดขึ้น โดยมีหน้าตาประมาณนี้ครับ


        จากนั้น กด Enter ไปเพื่อดำเนินการต่อ ติดตั้งได้ซักพัก ก็จะมีหน้าต่างขึ้นมาถามรหัสผ่านที่ต้องการที่จะใช้ในระบบ หน้าจอประมาณนี้ครับ


        จากนั้นระบบจะทำการยืนยันรหัสผ่านอีกครั้ง ตามรูปข้างล่างเลยครับ


         เมื่อติดตั้งเสร็จเรียบร้อยแล้ว จะขึ้นข้อความตามรูปเลยครับ


        จากนั้นใช้คำสั่ง exit เพื่อออกจาก root และเราก็จะมาทำการทดสอบคำสั่ง mysql ที่เราเพิ่ง
ติดตั้งเสร็จ โดยใช้คำสั่งนี้เลยครับ

        mysql

        ถ้ากระบวนการติดตั้งทั้งหมดถูกต้องก็จะเห็นหน้าตาของ mysql ประมาณนี้ครับ






        จากนั้นก็ ออกจาก mysql ด้วยคำสั่ง quit เพื่อดำเนินการในขั้นตอนต่อไป

 

Php

        Php คือ PHP5 เป็นโปรแกรมประมวลผลฝั่ง Server Side ที่ใช้ในการเขียนเว็บ โดยประมวลผลคำสั่งทางฝั่ง Server แล้วแสดงผลทาง Browser เพื่อแสดงผล
วิธีการติดตั้งใช้คำสั่งนี้ครับ

        sudo apt-get install php5 libapache2-mod-php5

        จากนั้นระบบจะแสดงการเปลี่ยนแปลงของพื้นที่เก็บข้อมูลที่จะเกิดขึ้น และจะยืนยันการดำเนินการต่อหน้าจอประมาณนี้ครับ


        กด Enter เพื่อยืนยันการดำเนินการต่อ และหลังจากเสร็จขั้นตอนนี้ เราก็จะทำการติดตั้ง Plug-in ของ PHP ที่จำเป็นต้องใช้ โดยใช้คำสั่งดังนี้ครับ

        sudo apt-get install  php5-mysql php5-curl php5-gd php5-common php5-curl php5-ffmpeg php5-imagick php5-imap php5-mcrypt php5-memcache

        จากนั้นก็จะแจ้งการเปลี่ยนแปลงและถามการดำเนินการต่อเช่นเคย หน้าตาจะประมาณนี้ครับ
       

        หลังจากเสร็จขั้นตอนการติดตั้ง plug-in ก็จะได้หน้าจอดังรูปข้างล่างเลยครับ


        สองขั้นตอนในการติดตั้ง PHP ดังที่ได้กล่าวมา สามารถรวมเป็นคำสั่งเดียวได้เลยนะครับ เผื่อใครอยากจะติดตั้งให้เสร็จภายในครั้งเดียว ผู้เขียนแยกหมวดหมู่ออกให้เห็นภาพการติดตั้งเท่านั้น

        ขั้นตอนถัดไปเราก็จะทำการทดสอบ PHP ที่เราติดตั้งไปว่าจะใช้งานได้หรือไม่ โดยการสร้างไฟล์ info.php ไว้ที่ตำแหน่ง /var/www ซึ่งเป็นตำแหน่ง web root ของ Apache Server (สามารถปรับเปลี่ยนได้ด้วย Apache Config) ซึ่งเราจะเขียนฟังก์ชันการแสดงรายละเอียดของ PHP โดยใช้คำสั่งตามนี้เลยครับ

        sudo nano /var/www/info.php

        จากนั้นให้เขียนรายละเอียดของไฟล์ตามรูปเลยครับ


        เมื่อเสร็จเรียบร้อยแล้วเราก็ทำการบันทึกไฟล์นี้ไว้ แล้วออกจากระบบ ในที่นี้ผู้เขียนขอทำการ
ออกจากระบบโดยการกด Ctrl X แล้วระบบจะถามบันทึกเอง แล้วก็ออกจากโปรแกรม nano (หรือจะ WriteOut ก่อนก็ตามถนัดเลยครับ) 

        จากนั้นเราจะทำการทดสอบหน้าเว็บของ PHP ที่เราเขียนขึ้น โดยใช้ Browser ในการทดสอบ โดยพิมพ์ URL ของ Raspberry Pi ดังนี้ครับ

        http://192.168.164.102/info.php

        หน้าจอจะแสดงรายละเอียดของ PHP ที่ติดตั้งใน Raspberry Pi  โดยจะมีหน้าตาประมาณนี้ครับ

 
        ถึงขั้นตอนนี้ถือว่าขั้นตอนการติดตั้ง LAMP เสร็จเรียบร้อยแล้ว แต่ Mysql ของเรายังไม่มีเครื่องมือในการจัดการโดยสะดวกเท่าที่ควร
        ท้ายสุดเรามาเสริมการใช้งาน Mysql Server ด้วย PHP MyAdmin กัน โดยการติดตั้งรวมเข้าไปใน Raspbian ด้วยคำสั่งนี้ครับ

        sudo apt-get install phpmyadmin

        ระบบจะแจ้งการเปลี่ยนแปลง และสอบถามการดำเนินการเช่นเคยครับ
     

        จากนั้นก็ให้กด Enter เพื่อดำเนินการต่อ เมื่อดำเนินการไปซักพักก็จะมีหน้าจอแจ้งรายละเอียดของ PHP MyAdmin ดังรูปข้างล่างครับ

      
         เมื่ออ่านรายละเอียดเรียบร้อยแล้ว ก็กด OK จากนั้นระบบก็จะสอบถามว่าให้ทำการตั้งค่าของ PHP MyAdmin ด้วย dbconfig-common หรือไม่ ตามรูปด้านล่างครับ


        ในที่นี้ให้ตอบ Yes เพื่อให้ตั้งค่า config ตาม dbconfig-common เมื่อผ่านขั้นตอนดังกล่าว ระบบจะสอบถามรหัสผ่านของ Database Admin (mysql root) โดยมีหน้าจอดังนี้ครับ


         จากนั้นก็ทำการใส่รหัสผ่านที่ต้องการ แล้วกด OK เพื่อดำเนินการต่อไป และระบบจะทำการสอบถามรหัสผ่านที่จะใช้ในการติดต่อ mysql ของ Application ตามรูปครับ


        หลังจากขั้นตอนดังกล่าว ก็จะสอบถาม Web Server ที่เราติดตั้ง เพื่อระบบจะทำการ reconfig ค่าต่างๆ ให้ใหม่ ตามที่ได้สอบถามมาข้างต้น โดยจะมีหน้าจอดังนี้ครับ

 
        ในที่นี้ให้เลือก apache2 เพราะ Web Server ที่เราติดตั้งเป็น Apache2 จากนั้นก็กด OK ระบบก็จะทำการติดตั้งค่าต่างๆให้โดยอัตโนมัติ ถ้าหากว่าขั้นตอนทั้งหมดถูกต้องก็จะได้หน้าตาประมาณนี้ครับ


        จากนั้นเรามาทำการทดสอบ PHP MyAdmin กันดีกว่า โดยใช้ Browser พิมพ์ URL ดังนี้ครับ

        http://192.168.164.102/phpmyadmin

        หากติดตั้งทุกอย่างถูกต้องก็จะขึ้นหน้าจอตามรูปด้านล่างเลยครับ


        เท่านี้เราก็จะได้ PHP MyAdmin ไว้ใช้งาน ไม่แพ้การติดตั้ง Apserv หรือ XAMPP
ที่ใช้กันอยู่เลยครับ หลังจากขั้นตอนนี้แล้ว ผู้อ่านอยากจะเขียนเว็บ PHP ติดต่อกับ Mysql Server
ก็ตามใจแต่ละท่านเลยครับ
        ใครมีโปรเจคที่น่าสนใจก็สามารถแชร์ความรู้กันทาง gtalk หรือทางเมลล์ได้นะครับ
olekhanchai@gmail.com หรือสนใจอุปกรณ์สามารถเข้าสั่งซื้อได้ในเว็บ http://www.hobbyembshop.biz หรือสินค้าโปรโมชั่นที่ https://www.facebook.com/hobbyembedded  
        หวังว่าบทความนี้คงเป็นประโยชน์ต่อผู้ที่กำลังศึกษา Raspberry Pi นะครับ หากมีความรู้ใหม่ๆ เดี๋ยวจะมาแชร์ในคราวหน้าอีกทีนะครับ เดือนนี้ขอจบบทความไว้เพียงเท่านี้แหล่ะแล้ว เจอกันคราวหน้าครับ