วันพุธที่ 24 กุมภาพันธ์ พ.ศ. 2559

ติดตั้ง PHP บน Raspberry Pi เพื่อทำเว็บไซต์ให้น่าสนใจยิ่งขึ้น

ติดตั้ง PHP บน Raspberry Pi เพื่อทำเว็บไซต์ให้น่าสนใจยิ่งขึ้น

PHP เป็นโปรแกรมภาษาที่ช่วยให้เว็บไซต์ดูน่าสนใจมากยิ่งขึ้นมากกว่า html และเรายังสามารถสร้างเว็บไซต์ให้ทำงานได้ตามที่เราต้องการ
ก่อนการติดตั้ง PHP
ควร ติดตั้ง Apache บน Raspberry Pi ก่อน
การติดตั้ง PHP
ใช้คำสั่ง
sudo apt-get install php5 libapache2-mod-php5 -y
เมื่อติดตั้งเสร็จแล้ว มาทดสอบกันสักหน่อย
ทดสอบการทำงานของ PHP
ไปที่ path /var/www ซึ่งเป็น root ของ Web Server ด้วยคำสั่ง
cd /var/www
แล้วสร้างไฟล์ PHP บน Raspberry Pi ด้วยคำสั่ง
sudo nano index.php
แล้วลองใส่ script ตามนี้
<?php echo “Hello World – สวัสดีชาวโลก”;  ?>
ทำการ save แล้วเปิด Web Browser แล้วใส่ IP ของ Raspberry Pi (ดูวิธีการ Fix IP ให้กับ Raspberry Pi) แล้วตามด้วย index.php เช่น http://192.168.0.163/index.php เพื่อทดสอบการทำงานของ PHP จะต้องปรากฎคำว่า Hello World – สวัสดีชาวโลก บนหน้าจอ หากไม่ใส่ index.php โปรแกรมจะเข้าไปที่ index.html ก่อน
หากต้องการลบไฟล์ index.html เพื่อให้เว็บของเราทำงานด้วย index.php อย่างเดียว ให้ไปที่ /var/www แล้วใส่คำสั่ง
sudo rm -rf index.html
ในบางครั้งหากลบไม่ได้ อาจจะติดปัญหาเรื่องสิทธิ ให้ทำการเปลี่ยนสิทธิก่อนแล้วค่อยลบ ด้วยคำสั่งนี้
sudo chown pi: index.html
เปิด Web Browser แล้วเข้าไปที่ IP ของ Raspberry Pi อีกครั้ง โดยไม่ต้องใส่ index.php ไฟล์ index.php จะสามารถทำงานได้โดยทันที
ลองแก้ไขโปรแกรม PHP เป็นแบบอื่นๆดูบ้าง แล้วสังเกตุผล
<?php echo date(‘Y-m-d H:i:s’); ?>
<?php phpinfo(); ?>

ติดตั้ง Apache2 เพื่อทำ Web Server บน Raspberry Pi

ติดตั้ง Apache2 เพื่อทำ Web Server บน Raspberry Pi

Apache เป็นโปรแกรมทำ Web Server ที่เป็นที่นิยมอย่างมาก เราสามารถติดตั้ง Apache บน Raspberry Pi ได้ และแน่นอน เมื่อติดตั้งเสร็จ เราก็จะได้ Web Server ส่วนตัวเพื่อใช้งานหรือทดสอบ Script ต่างๆ
Apache สามารถแสดงผลไฟล์ html บน http ได้ และหากเราติดตั้งโมดูลเพิ่ม เราจะสามารถให้บริการเว็บไซต์ด้วยภาษา PHP ได้
ก่อนติดตั้ง Apache
ผู้เขียนแนะนำให้ทำการ Fix IP ให้กับ Raspberry Pi ก่อนทำการติดตั้ง Raspberry Pi
การติดตั้ง Apache
ก่อนทำการติดตั้ง Apache ให้เราทำการ update ข้อมูลของ Raspberry Pi ก่อน ด้วยคำสั่ง
sudo apt-get update
เมื่อทำการ update แล้ว ป้อนคำสั่งติดตั้ง Apache
sudo apt-get install apache2 -y
เมื่อติดตั้ง Apache เรียบร้อยแล้ว ทดสอบการทำงานของ Apache
ทดสอบ Web Server
เปิด Web Browser เช่น Internet Explorer, Chrome, Firefox เพื่อทดสอบการทำงานของ Web Server แล้วใส่ค่า IP ของ Raspberry Pi ที่เรากำหนดไว้ (จากตัวอย่างกำหนดไว้ที่ IP 192.168.0.163) จะต้องปรากฎข้อความตามรูปข้างล่างนี้

Raspberry Pi – Apache Web Server
ตอนนี้ เราก็มี Web Server เป็นของตัวเองแล้ว

การสั่งโปรแกรมให้ทำงานอัตโนมัติด้วย Cron บน Raspberry Pi

การสั่งโปรแกรมให้ทำงานอัตโนมัติด้วย Cron บน Raspberry Pi

Cron เป็นเครื่องมือสำหรับการกำหนดเวลาเพื่อสั่งให้สคริปต์ทำงาน เป็นระยะๆ และในช่วงเวลาที่คงที่ เช่น ทุกนาที ทุกชั่วโมง ทุกวัน โดยงานที่เราสามารถกำหนดช่วงเวลาให้ทำงานนั้น ได้แก่ การสำเนาข้อมูลในฐานข้อมูลทุกวันในเวลาเที่ยงคืน การสำเนาการเข้าสู่ระบบทุกสัปดาห์ การสำเนาข้อมูลการใช้งาน CPU ทุกชั่วโมง
เราสามารถตั้งเวลาการ Run โปรแกรมได้ด้วยคำสั่ง
crontab -e
ในบางครั้ง เมื่อเราใช้งานคำสั่ง crontab -e ครั้งแรก ระบบจะทำการถามว่าเราจะเลือกใช้ editor ตัวไหนในการแก้ไข ให้เราใส่คำว่า
nano
โดยรูปแบบการตั้งเวลาจะเป็นดังนี้
  * * * * * command
# ┬ ┬ ┬ ┬ ┬
# │ │ │ │ │
# │ │ │ │ │
# │ │ │ │ └───── * ตัวที่ 5 วันในสัปดาห์(0 และ 7 คือวันอาทิตย์, 6 คือวันเสาร์)
# │ │ │ └────────── * ตัวที่ 4 เดือน (1 – 12)
# │ │ └─────────────── * ตัวที่ 3 วันของเดือน (1 – 31)
# │ └──────────────────── * ตัวที่ 2 ชั่วโมง (0 – 23)
# └───────────────────────── * ตัวแรก นาที (0 – 59)
โดย command คือคำสั่งที่เราต้องการให้ทำงานเช่น
*/10 * * * * ping -c1 192.168.0.186
จะหมายถึงทุกๆ 10 นาทีให้ Ping ไปที่ IP 192.168.0.186 จำนวน 1 ครั้ง

การตั้งค่า Fail2Ban เพื่อป้องกันการ Hack ให้ Apache

การตั้งค่า Fail2Ban เพื่อป้องกันการ Hack ให้ Apache

โปรแกรม Fail2Ban คือ โปรแกรมที่ช่วยป้องกันการ Hack โดยการตรวจสอบ Log ให้กับเรา หลังจากที่เราติดตั้งเสร็จเรียบร้อยแล้ว (ดูวิธีการติดตั้ง Fail2Ban ให้กับ Raspberry Pi) เรามาดูวิธีการตั้งค่า Fail2Ban เพื่อป้องกันการ Hack กัน
เข้าไปตั้งค่าให้กับ Fail2Ban ด้วยคำสั่ง
sudo nano /etc/fail2ban/jail.conf
แล้วเลื่อนลงมาดูที่หัวข้อ [apache], [apache-noscript] และ [apache-overflows] แล้วทำการ Enable ให้หมด
[apache]
enabled = true
……
[apache-noscript]
enabled = true
…..
[apache-overflows]
enabled = true
…..

การตั้งค่าป้องกันการ Hack ให้กับ Apache บน Raspberry Pi
เพียงเท่านีี้เราก็สามารถป้องกันการ Hack ได้ระดับหนึ่งแล้ว

การใช้ Interrupt รับค่าสวิทช์บน Raspberry Pi

การใช้ Interrupt รับค่าสวิทช์บน Raspberry Pi

Interrupt หรือ การขัดจังหวะ ถูกนำมาใช้ในการรับข้อมูลจากภายนอกทันทีเมื่อเข้ามา ไม่ว่าระบบจะทำอะไรอยู่ หากมีข้อมูลเข้ามาที่ Port Interrupt แล้วล่ะก็ ระบบจะหยุดงานอื่นก่อน แล้วทำการรับข้อมูลจาก Port Interrupt ก่อนเสมอ
เรามาดูตัวอย่างในภาษา C กัน
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <wiringPi.h>
// ตัวอย่างนี้เราจะใช้ GPIO ขา 16 ซึ่งก็คือ GPIO4 ในไลบรารี่ของ wiringPi (ดูวิธีการติดตั้ง wiringPi บน Raspberry Pi)
#define BUTTON_PIN 4
// กำหนดค่าตัวแปรของตัวนับ 
volatile int eventCounter = 0;
// ————————————————————————-
// โปรแกรมย่อย myInterrupt: จะถูกเรียกทุกครั้งเมื่อถูก Interrupt
void myInterrupt(void) {
     eventCounter++;
     delay(40); // หน่วงเวลาช่วง Debouncing ของสวิทช์
}
// ————————————————————————-
// main
int main(void) {
     // เรียกใช้งานไลบรารี่ของ wiringPi
     if (wiringPiSetup () < 0) {
          fprintf (stderr, “Unable to setup wiringPi: %s\n”, strerror (errno));
          return 1;
     }
     // กำหนดขา 16 หรือ GPIO4 ให้รับค่า Interrupt เมื่อมีการเปลี่ยนสถานะจาก High เป็น Low หรือการทำงานขอบขาลง แล้วเรียกใช้งานโปรแกรมย่อย myInterrupt()
     if ( wiringPiISR (BUTTON_PIN, INT_EDGE_FALLING, &myInterrupt) < 0) {
          fprintf (stderr, “Unable to setup ISR: %s\n”, strerror (errno));
          return 1;
     }
     // แสดงค่าที่นับได้ทุกๆ 1 วินาที
     while ( 1 ) {
          printf( “%d\n”, eventCounter );
          delay( 1000 ); // หน่วงเวลารอ 1 วินาที แล้วแสดงค่าอีกครั้ง
     }
     return 0;
}
โปรแกรมนี้เป็นโปรแกรมทดสอบการ Interrupt โดยรับค่าจาก Switch เมื่อเรากด Switch จะทำให้แรงดันเปลี่ยนจาก High เป็น Low ซึ่งถ้าเรามองในรูปของสัญญาณแบบดิจิทัลแล้วมันคือการทำงานของขอบขาลง (Falling Edge) นั่นเอง เมื่อโปรแกรม Interrupt ตรวจพบขอบขาลงของสัญญาณ โปรแกรมจะไปเรียกใช้งานโปรแกรมย่อย myInterrupt ทันที แม้ว่าช่วงนั้นโปรแกรมหลัก (main) จะทำการหน่วงเวลา 1 วินาทีอยู่ เช่น เริ่มต้นทำงานค่าที่แสดงต้องเป็น 0 แล้วเราทำการกดปุ่มเร็วๆสัก 3 ครั้งใน 1 วินาที โปรแกรมจะต้องแสดงค่าถัดไปคือ 3 เลย เช่น
0
3
ไม่ใช่แสดง
0
1
2
3
และถ้าเรากดค้างไว้ โปรแกรมจะต้องแสดงค่าเพิ่มแค่ 1 เนื่องจากเกิดขอบขาลงเพียงครั้งเดียวจากการกดปุ่ม
4
4
4
ไม่ใช่
4
5
6
ดังนั้นแล้วโปรแกรม Interrupt จึงสามารถนับจำนวนการกดได้อย่างแม่นยำกว่าโปรแกรมที่ตรวจสอบการกดปุ่มธรรมดา

การแก้ไขปัญหามองไม่เห็นภาพ เมื่อใช้หัวแปลง HDMI-VGA กับ Raspberry Pi

การแก้ไขปัญหามองไม่เห็นภาพ เมื่อใช้หัวแปลง HDMI-VGA กับ Raspberry Pi

เมื่อเราทำการติดตั้ง Operating System ใหม่ให้กับ Raspberry Pi ไม่ว่าจะเป็นรุ่น Wheezy หรือ Jessie นั้น หากเราใช้หัวแปลงจอภาพจาก HDMI เป็น VGA รูปร่างประมาณภาพด้านล่างนี้ กับจอ Monitor รุ่นเก่าๆที่มีแต่ช่องสัญญาณแบบ VGA เท่านั้น


การแก้ไขปัญหาภาพไม่ขึ้นจอเมื่อใช้ตัวแปลง HDMI เป็น VGA บน Raspberry Pi
ในครั้งแรกอาจจะไม่เห็นภาพ ทั้งที่จริงๆแล้วตัวแปลงก็ไม่ได้เสียอะไรเลย วิธีแก้ไขคือ ให้แก้ไขค่า Config บางค่า โดยใช้คำสั่ง
sudo nano /boot/config.txt
แล้วเติมคำสั่ง 2 บรรทัดด้านล่างนี้ลงไปท้ายไฟล์
hdmi_force_hotplug=1
hdmi_drive=2
แล้วทำการ Reboot เครื่อง Raspberry Pi ดู คราวนี้จะเห็นภาพแล้ว

การ Fix IP ให้กับ Raspberry Pi ที่ใช้ Raspbian Jessie

การ Fix IP ให้กับ Raspberry Pi ที่ใช้ Raspbian Jessie

การ Fix IP ให้กับ Raspberry Pi ที่ใช้ Raspbian Jessie ต่างจาก Wheezy ตรงที่ Wheezy สามารถ Fix IP ได้โดยการกำหนดค่าใน /etc/network/interfaces แต่ Jessie จะต้องกำหนดค่า Fix IP
ใน /etc/dhcpcd.conf
เราสามารถ Fix IP ให้กับ Jessie ได้ด้วยคำสั่ง

sudo nano /etc/dhcpcd.conf

แล้วเติมค่าด้านล่างนี้ ไปที่บรรทัดสุดท้าย

interface eth0
static ip_address=192.168.2.201
static routers=192.168.2.1
static domain_name_servers=192.168.2.1

โดย 192.168.2.201 คือค่า IP ที่เราต้องการ Fix

และ 192.168.2.1 คือ IP ของ Router ของเรา