วันเสาร์ที่ 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