วันเสาร์ที่ 11 กรกฎาคม พ.ศ. 2558

แจก Image RaspberryPi



เป็น Image RaspberryPi ที่ทำจากวิธีการจากบทความที่ผ่านมา สำหรับเพื่อให้ศึกษา และได้พัฒนาต่อไปจ้า ถ้ามีคำถาม ฝากไว้ใน Blog หรือ e-mail rittichai.a@hotmail.com อยากโชว์เพาว์ บ้าง

GPSLOG คลิก


Ip 192.168.1.11
Userlogin pi
Password raspberry

MySql
user root
password 112233

phpmyadmin
user root
password 112233



วันพุธที่ 8 กรกฎาคม พ.ศ. 2558

Script ตั้งเวลา RaspberryPi จาก USB GPS



   การตั้งเวลาโดยอ้างเวลาดาวเทียม  GPS




   ถ้าหาก Raspberry pi รีสตาร์ทหรือดับไป แล้วติดเครื่องขึ้นมาใหม่ เวลาจะเป็นเท่าไร ดังนั้น ต้องเตรียม Script ทำการตั้งเวลา โดยอ่านค่าจาก USB GPS โดยคำสั่ง

   nano startup_time.sh

 #!/bin/sh

device1="/dev/ttyUSB0"
if [ -e "$device1" ]
then
 date -s '01/01/2014 00:01'
 sleep 1
 pkill ntpd
 pkill gpsd
 gpsd -b -n -D 2 /dev/ttyUSB0
 sleep 2
 GPSDATE=`gpspipe -w | head -10 | grep TPV | sed -r 's/.*"time":"([^"]*)".*/\1/' | head -1`
 echo $GPSDATE
 date -s "$GPSDATE"
 /usr/sbin/ntpd
 echo 'Finnish seting Date'
#python /home/pi/my_python/lcd-date.py
 exit
else
 echo 'GPS does not Exit !!!!!!!'
fi 



  ทำการตั้ง Autorun on boot
 
  nano /etc/rc.local


#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
 printf "My IP address is %s\n" "$_IP"
fi
   /home/pi/startup_time.sh
exit 0

วันอังคารที่ 7 กรกฎาคม พ.ศ. 2558

การทำ Autorun และการดูแล PythonScript








        

          จะเป็นบทความต่อเนื่องจากบทความที่แล้ว หลังจากที่เราได้ระบบเก็บ ข้อมูลจาก USB GPS แล้วต้องการทำให้มันเริ่มต้นทำงานโดยอัตโนมัติ และคอยติดตามการทำงานของ  python script ที่เราเขียนไว้ว่า ยังทำงานอยู่หรือไม่ ถ้าไม่ต้องทำยังไง เช่น เราสามารถเซตให้ python script ของเรารันอัตโนมัติ ตั้งแต่ บูต เครื่อง  และหาก python script Run ไปนานๆ เกิด error และปิดตัวเอง  ก็อาจจะเซตให้ Supervisor ช่วย restart python script  ให้ทำงานใหม่ได้ ซึ่งวิธีการก็ก็อบมาจาก http://www.chokelive.com/blog/2014/01/manage-python-script-by-supervisor.html

          Supervisor
          Supervisor เป็น Process Control System ประโยชน์ของ  คือ ช่วยจัดการและดูแลการทำงาน Process บนระบบปฏิบัติการ Linux ซึ่งในที่นี้เราเอามาประยุกต์ใช้กับ Raspberry Pi  เพื่อดูแลจัดการกับ Python Script  เพื่อให้แน่ใจว่า Script ได้ตลอดเวลา ตั้งแต่เปิดเครื่อง หรือแม้แต่กระทั้งหาก Script ของเรามีการทำงานผิดพลาดและปิดตัวลง Supervisor ก็ยังจะช่วย Restart Python Script  ด้วย      

          การติดตั้ง
          sudo apt-get install supervisor

          การปรับแต่ง
          sudo nano /etc/supervisor/conf.d/test_supv.conf 

          [program:gpslog]
          command=python /home/pi/gpslog.py
          stdout_logfile=/home/pi/gpserrorlog.txt
          redirect_stderr=true
          autorestart=true
          autostart=true

          คำอธิบาย
[program:gpslog] คือ  ชื่อ config ที่เราตั้งขึ้นcommand คือ คำสั่งที่รัน process ในที่นี้เรา  
                              สั่งให้รันไฟล์ python
stdout_logfile      คือ การ print พวกค่า output หรือ ค่า error ต่างๆ ไปเก็บไว้ใน logfile ที่กำหนด
autorestart         คือ การตั้งค่าให้มีการ restart หาก python script ของเราหยุดทำงาน
autostart            คือ  สั่งให้ python script ทำงานตั้งแต่เริ่มต้นเปิดเครื่อง



วันจันทร์ที่ 29 มิถุนายน พ.ศ. 2558

Raspberrypi+GPS+MySQL


 

 
GPS Logger 

สืบเนื่องจากบทความนำเสนอวิธีการใช้งาน USB GPS ผ่านทางภาษา Python บน Raspberry Pi
จาก http://learninginventions.org/?page_id=1026 ซึ่งเป็นบทความที่เยี่ยมยอดมาก อ่านแล้วเข้าใจง่าย เลยอยากพัฒนาต่อยอด จากของที่บอร์ด Raspberry Pi ทำได้ ค้นหาไปเจอ USB GPS ราคาถูกที่   www.spelecshop.com ( ถ้ามีถูกกว่ารบกวนช่วยบอกด้วย ) แต่ของหมด เลยได้ Serial GPS+ตัวแปลงPL2303HX USB to UART TTL เพื่อเป็นระบบ GPS ราคาต่ำ

  1.การทดสอบการทำงานของ GPS ร่วมกับ RaspberryPi ด้วยคำสั่ง

  • lsusb ก็จะพบ PL2303



  • ติดตั้ง gpsd พร้อมทั้งโปรแกรมทดสอบ และ api ใช้งานผ่าน Python

apt-get install gpsd gpsd-clients python-gps

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

gpsd /dev/ttyUSB0 -F /var/run/gpsd.sock

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


หมายเหตุ หากเรียกใช้โปรแกรม cgps แล้วแสดงหน้าจอข้างต้นเพียงไม่กี่วินาทีแล้วจบการทำงาน        
           อาจต้องเรียกใช้ gpsd อีกครั้งหนึ่งโดยใช้คำสั่ง
killall gpsd
gpsd /dev/ttyUSB0 -F /var/run/gpsd.sock
cgps -s
  • ทดสอบเขียนโปรแกรมอ่านค่าจาก  GPS
nano gpstest.py

import gps
# Listen on port 2947 (gpsd) of localhost
session = gps.gps("localhost", "2947")
session.stream(gps.WATCH_ENABLE | gps.WATCH_NEWSTYLE)

while True:
try:
report = session.next()
# Wait for a 'TPV' report and display the current time To see all report data, uncomment the line below print report
if report['class'] == 'TPV':
if hasattr(report, 'lat'):
lat = report.lat
if hasattr(report, 'lon'):
lon = report.lon
if hasattr(report, 'speed'):
speed = report.speed

print report.time
print lat
print lon
print speed
except KeyError:
pass
except KeyboardInterrupt:
quit()
 
  • ทดสอบโปรแกรม โดยใช้คำสั่ง
python gpstest.py

 

   2. ติดตั้ง โปรแกรม เวบเซอร์เวอร์ และฐานข้อมูล
 Raspberry Pi เองเป็นคอมพิวเตอร์ขนาดเล็กที่รัน Linux อยู่ภายใน และตัว Raspbian ซึ่งเป็น OS ที่เราได้ทำการ Write Images File ลง SD-Card ไปเมื่อคราวที่แล้วก็ถูกดัดแปลงมาจาก Debian ฉะนั้นคำสั่งต่างๆสำหรับลงโปรแกรมก็จะเป็นคำสั่งเดียวกับของ Debian นั้นก็คือ apt-get โครงงานต้องใช้ PHP กับ MySQL เป็นร่วมด้วย  ดังนั้นต้องทำการติดตั้ง Apache, PHP, MySQL บน Raspberry Pi ด้วย จะสามารถทำงานเป็นเว็บเซิร์ฟเวอร์โดยสมบูรณ์ เริ่มจาการต่อสายแลนและแหล่งจ่ายไฟให้ Raspberry Pi ทำการ Login เข้า Raspberry Pi และติดตั้งแพคเกจต่างๆ เริ่มด้วยการอัพเดทแพคเกจ
apt-get update
apt-get upgrade
  • ทำการติดตั้ง Apache, MySQL , PHP , phpMyAdmin
apt-get install apache2  apache2-utils
apt-get install libapache2-mod-php5 php5 php-pear php5-xcache
apt-get install mysql-server mysql-client
ขั้นตอนการติดตั้ง MySQL ระบบจะขึ้นหน้าจอมาให้ใส่รหัสผ่านของ MySQL เป็น 112233ก็แล้วกัน
  • ติดตั้ง php5 mod MySQL  เพื่อใช้เรียกข้อมูแสดงผล


apt-get install php5-mysql

  • ทำการติดตั้ง   phpmyadmin

apt-get install phpmyadmin

ในขั้นตอนการติดตั้ง phpmyadmin ระบบจะขึ้นหน้าจอมาให้เลือกว่าจะใช้กับเว็บเซิร์ฟเวอร์ตัวไหน ให้ใช้ปุ่มลูกศรในการเลื่อนไปยังตัวเลือกที่ต้องการ และใช้ space bar ในการเลือกตัวเลือก และกด tab เพื่อเลื่อนให้เคอร์เซอร์มาอยู่ที่ปุ่ม OK แล้วกด Enter ถ้าถามรหัส ให้เป็น 112233 เหมือนกันเปลี่ยนทีหลังได้


  • แก้ไข ข้อมูลใน /etc/apache2/apache2.conf ด้วย
nano /etc/apache2/apache2.conf
เพิ่มบรรทัด
Include /etc/phpmyadmin/apache.conf
สั่ง Reart Astpache และ MySQL
service apache2 restart
service mysql restart
ทดสอบเปิดเว็บดูได้ครับ
http://raspberry pi ip/phpmyadmin
  • ติดตั้ง MySQL module python
apt-get install python-mysqldb
login ด้วย root รหัส 112233 สร้าง ฐานข้อมูล gpslog ใน MySQL ด้วย phpmyadmin
สร้างฐานข้อมูลชื่อ gpslog และสร้าง teble ชื่อ gpsdata และ gpsday ให้มีรายละเอียด ด้งรูป


  • ทดสอบเขียนโปรแกรมภาษา python ค่า GPS นำข้อมูล เข้า ฐานข้อมู MySQL
nano gpslog.py

import gps
import MySQLdb
import time
import os

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

db = MySQLdb.connect("localhost", "root", "112233", "gpslog")
curs=db.cursor()

# Listen on port 2947 (gpsd) of localhost
session = gps.gps("localhost", "2947")
session.stream(gps.WATCH_ENABLE | gps.WATCH_NEWSTYLE)

while True:
try:
report = session.next()
# Wait for a 'TPV' report and display the current time To see all report data, uncomment the line below print report
if report['class'] == 'TPV':
if hasattr(report, 'lat'):
lat=report.lat
if hasattr(report, 'lon'):
lon=report.lon
if hasattr(report, 'speed'):
speed=report.speed

print lat
print lon
print speed

curs.execute("DELETE FROM gpsdata")
curs.execute("INSERT INTO gpsdata values (CURRENT_DATE(), NOW(), '%s', '%s', '%s')"%(lat, lon, speed))
curs.execute("INSERT INTO gpsday SELECT ttdate, ttime, lat, lon, speed FROM gpsdata")
curs.execute("DELETE FROM gpsday WHERE ttdate < (CURRENT_DATE() - INTERVAL 1 DAY)")
db.commit()

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

 
 

  • เขียนโปรแกรม PHP นำข้อมูลที่ได้มาแสดง
nano /var/www/gpslog.php 

<html>
 <head>
 <title>Simple show GPS Log</title>
 <META HTTP-EQUIV='Refresh' CONTENT='10;'>
 </head>
<body>
<?
 $obj_con = mysql_connect(localhost,root,112233);
 mysql_select_db(gpslog,$obj_con);
 mysql_query("SET NAMES UTF8");

 $sql = "select * from gpsday order by ttime desc limit 20 ";
 $sql_query=mysql_query($sql);
?>
 <table border=1 width=35% >
 <tr align="center" bgcolor="#CCCCFF">
 <td width="30%">เวลา</td><td>Latitude</td><td>Longitude</td><td>ความเร็ว</td></tr>
<?
 while($array =mysql_fetch_array($sql_query))
 {
 //echo "<td>$array[ttdate]</td>";
 echo "<td>$array[ttime]</td>";
 echo "<td>$array[lat]</td>";
 echo "<td>$array[lon]</td>";
 echo "<td>$array[speed]</td>";
 echo "</tr>";
 }
  mysql_close();
?>
</table>
</body>
</html>
 




  • เขียนโปรแกรม PHP นำพิกัดลงแผนที่ googlemap

nano /var/www/gpsmap.php



<html>
<head>
        <title>Simple GPS position on Googlemap</title>
</head>
<body>
<?      $obj_con = mysql_connect(localhost,root,112233);
        mysql_select_db(gpslog,$obj_con);
        mysql_query("SET NAMES UTF8");

        $str_sql = "select * from gpsdata ";
        $sql_gps = mysql_query($str_sql,$obj_con);
?>
<?  while($in_gps = mysql_fetch_array($sql_gps))
 { ?>
          <td><? $lat1= $in_gps['lat'] ?></td>
          <td><? $lon1= $in_gps['lon'] ?></tr>
  <?}
?>
<? echo '<script type="text/javascript">';
 echo "var lat1 = '$lat1';";
 echo "var lon1 = '$lon1';";
 echo '</script>';
?>
<script src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script>
 function loadmap()
  {
  var mapSet = {center:new google.maps.LatLng(lat1,lon1),zoom:14,
         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(lat1,lon1),
     icon:'http://www.kr.ac.th/webresource/arrow/aro123.gif',
     animation:google.maps.Animation.BOUNCE});
  marker.setMap(map);
  }
  google.maps.event.addDomListener(window, 'load', loadmap);autoUpdate();
</script>
          <div id="googleMap" style="width:100%;height:100%;"></div>
</body>
</html> 




ถ้าเกิดมีใครสนใจหรือปัญหาสอบถาม ให้ Mail มาที่ rittichai.a@hotmail.com อาจจะลง Image ของ RaspberryPi ให้ลองศึกษาดู