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

Simple GPS Tracking System

จากบทความแรกที่ผู้เขียนได้นำเสนอการทำ ระบบ  GPS ที่เป็นตัวอ่านและเก็บค่าพิกัด GPS ไว้ในตัวระบบ ซึ่งเป็นระบบปิด แต่ถ้าลองแยกส่วนที่เป็น Database(MySql) กับ Webserver ไว้ที่อื่น (บนอินเตอร์เน็ต) ระบบก็จะกลายเป็น GPS Tracking System แต่ด้วยต้นทุนด้านค่าใช้จ่ายเกี่ยวกับ ค่าการให้บริการอินเตอร์เน็ต (ปัจจุบันต้อง Fix IP เพราะระบบ ddns จะติด Large Scale NAT ทำให้ไม่ได้รับ IP จริง ซึ่วงการกล้อง วงจรปิดเจอแล้ว)
ดังนั้น บทความนี้จึงเกิดขึ้นเพื่อแก้ปัญหาดังกล่าว



สิ่งที่ต้องใช้
1. Raspberry Pi พร้อม SDCard
2. USB GPS Doungle
3. 3G USB Modem พร้อม แพ็กเก็จอินเตอร์เน็ต
4. Thingspeak Account
5. Gmail Account
6. PowerBank


1.ส่วนของ DataBase

Thingspeak เป็บบริการ PaaS สำหรับ Internet of Things มีบริการ Open API เชื่อมต่อกับอุปกรณ์ผ่าน REST API, บริการเก็บข้อมูลแบบ Real-time, แสดงข้อมูล geolocation, ประมวลผลข้อมูล, แสดงข้อมูลกราฟ, สถานะของอุปกรณ์ และ plugins เสริมสำหรับเชื่อมต่อกับบริการอื่นๆ


1.ลงทะเบียน สร้าง Account กับ ThingSpeak



2.สร้าง New Chanel




3.กำหนดชื่อและจำนวน Field ที่ต้องการ ทำการบันทึก Chanel


4.เรียกดู API Key



1.ส่วนของ ตัว Hardware

เช่นเดิม Blog นี้เน้นการใช้งาน Raspberry pi ดังนั้นพระเอกก็คือ บอร์ด Raspberry pi พ่วงด้วย  USB GPS Glonass vk 172  ใช้กับ windows ได้ด้วย พร้อม  3G USB Modem ZTE 190M

1. Install OS (Rasbian) บน  SDCard

2. ตรวจสอบอุปกรณ์ USB บน Raspberry pi



    จะพบ อุปกรณ์ GPS และ USB 3G Modem

3. ส่วนของ USB GPS Glonass vk172

    ติดตั้ง gpsd พร้อมทั้งโปรแกรมทดสอบ และ api ใช้งานผ่าน Python
       sudo apt-get install gpsd gpsd-clients python-gps

    ให้เรียกใช้โปรแกรม gpsd ซึ่งจะทำงานในพื้นหลัง

       sudo  gpsd /dev/ttyACM0 -F /var/run/gpsd.sock

    ทดลองเรียกใช้โปรแกรม cgps เพื่อดูว่า GPS สามารถระบุพิกัดได้หรือไม่

       sudo cgps -s


  เขียนโปรแกรมอ่านค่าจาก  GPS ส่งข้อมูลเข้า ThingSpeak


4. ส่วนของ 3G USB Modem เพื่อต่ออินเตอร์เน็ต ทำการติดตั้ง โปรแกรมที่ใชเชื่อมต่อ 3G  คือ PPP, Sakis3G และ UMTSkeeper โดยใช้คำสั่ง

sudo apt-get install ppp

wget "http://downloads.sourceforge.net/project/vim-n4n0/sakis3g.tar.gz?

r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fvim-
n4n0%2Ffiles%2F&ts=1363537696&use_mirror=tene~t"-Osakis3g.tar.gz-4

sudo tarxzvf sakis3g.tar.gz

sudo chmod +x sakis3g

wget "http://zool33.uni-graz.at/petz/umtskeeper/src/umtskeeper.tar.gz"-4

sudo tarxzvf umtskeeper.tar.gz

sudo chmod +x umtskeeper



จากนั้นก็เรียกใช้โปรแกรม Sakis3G

sudo ./sakis3g --interactive



   เลือกเป็น USB device


เลือกข้อ 4. ZTE WCDMA Technologies MSM


เลือก ข้อ 2. Custom APN...


เนื่องจากผู้เขียน ใช้อินเตอร์เน็ตของ My By CAT APN จึงเป็น my สำหรับผู้ให้บริการรายอื่นให้ดู การตั้งค่า APN  จากผู้ให้บริการ


รอสักพักก็จะมีการแจ้งสถานะ


ดู Connection Information


เลือก Exit ออกจากโปรแกรม
ทดสอบดู PPP conection ใช้คำสั่ง
 ifconfig
 

ทำการเชื่อมต่ออัตโนมัติตอนเปิดเครื่อง
sudo nano /etc/rc.local
 
เพิ่มบรรทัด

sudo ./home/pi/sakis3g connect USBMODEM="19d2:0117" USBINTERFACE="0" APN="catinternet" APN_USER="my" APN_PASS="0"

 ทำการเขียนโปรแกรม ภาษาไพทอน อ่านค่า GPS แล้ว ส่งขึ้นเวบ Thingspeak

sudo nano gpslog.py

import gps
import time
import os
import httplib, urllib   

os.system('gpsd /dev/ttyACM0 -F /var/run/gpsd.sock')

session = gps.gps("localhost", "2947")
session.stream(gps.WATCH_ENABLE | gps.WATCH_NEWSTYLE)

while True:
    try:
        report = session.next()
        if report['class'] == 'TPV':
            if hasattr(report, 'lat'):
                lat=report.lat
            if hasattr(report, 'lon'):
                lon=report.lon
       
params = urllib.urlencode({'field1':lat ,'field2':lon     
                 ,'key':'HL2KTONHJIOXKZJO'})
        headers = {"Content-type": "application/x-www-form-
                  urlencoded","Accept": "text/plain"}
        conn = httplib.HTTPConnection("api.thingspeak.com:80") 
             try:
        conn.request("POST", "/update", params, headers)
            response = conn.getresponse()
            print response.status, response.reason
            data = response.read()
            conn.close()
         except:
            print "connection failed"

            time.sleep(30)
    except KeyError:
       pass
    except KeyboardInterrupt:
           quit()


ทำการทดสอบโปรแกรม

sudo python gpslog.py
 
ดูค่าที่ได้จากเวบ thingspeak โดยทำการ Login เข้าดู



ทำการสั่ง run โปรแกรมตอนเปิดเครื่อง โดยติดตั้ง Supervisor  (เขียนไปแล้วลองค้นดูในบล็อก)

3.ส่วนการแสดงผลตำแหน่งปัจจุบันของ Hardware GPS

สำหรับการแสดงผลพิกัด GPS ว่าปัจจุบันว่าอยู่ที่ไหน นั้นถ้าเป็นอุปกรณ์ GPS Tracking ที่ขายอยู่ตามท้องตลาดแล้ว จะมีการรายงานตำแหน่งอยู่ใน สองลักษณะ คือ รายงานพิกัด เข้าระบบเป็น SMS ซึ่งก็ยุ่งยากอยู่ และอย่างที่สอง คือ รายงานพิกัดเข้าเวบเซอฟเวอร์ของผู้ขายระบบ ซึ่งอาจปิดตัวหนีเมื่อไหร่ก็ได้

ดังนั้น ด้วยเราเป็นเป็นนักพัฒนา และมีเวบฟรีที่ใหบริการที่ สามารถฝากข้อมูล (Thingspeak) และ เวบที่สามารถ เขียน javascript ให้เรานำค่าที่ได้จาก เวบ Thingspeak มาลงบน googlemap ได้ ผู้เขียนจึงเลือก Blogger.com นี่แหละ มาเป็นเวบไซต์ที่แสดงผลพิกัด GPS เพราะเราสามารถ สร้างชื่อเวบไซต์ที่จำง่ายได้ โดยไม่เสียค่าใช้จ่าย

สำหรับ Code Javascript อ่าค่าและแสดงผลพิกัด GPS ทำได้ดังนี้

สร้างบทความใหม่ เลือก  HTML



สำหรับ script java เป็นดังนี้

<html>
<head>
<meta http-equiv="refresh" content="30">
</head>
<body>
<div id="googleMap" style="height: 480px; width: 580px;">
</div>
<script src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" type="text/javascript"></script>
<script src="https://www.google.com/jsapi" type="text/javascript"></script>
<script type="text/javascript">

   function loadData()  {
                $.getJSON('https://api.thingspeak.com/channels/63981/feed/last.json?apikey=LQQY5PH7YF5T9A1O&callback=?', function(data) {
                  latitude = data.field1;
                  longitude = data.field2;
                  ttime = data.created_at;   
                }); 
   }
  
   function loadmap()   {
     var mapSet = {center:new google.maps.LatLng(13.764934,100.5382955),zoom:5,
                mapTypeId:google.maps.MapTypeId.ROADMAP};
     var map=new google.maps.Map(document.getElementById("googleMap"),mapSet);
     var marker=new google.maps.Marker({
                position:new google.maps.LatLng(latitude,longitude),
                title: ttime});
                marker.setMap(map);
   }
  
   function updateMaps() {       
                loadData();
                google.maps.event.addDomListener(window, 'load', loadmap);
                document.write(Date());
   }

 updateMaps()

</script> 
</body>
</html>


ทดสอบแสดงหน้าตัวอย่าง



โดยพิกัดล่าสุดอยู่ที่  

https://api.thingspeak.com/channels/63981/feed/last.json

หรือเข้าดู Blog ตามชื่อที่เราตั้งไว้ก็จะเป็นเวบ GPS Tracking ของเราเอง




- ขาย  USB GPS Glonass vk172   ราคา 1,500 บาท มีอยู่ 2 ตัว



โทร 089-696-6324

 
  






วันอาทิตย์ที่ 3 มกราคม พ.ศ. 2559

GPS POSITION