วันเสาร์ที่ 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
วันอังคารที่ 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
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
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()
# 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
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
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()
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 นำข้อมูลที่ได้มาแสดง
<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>
- เปิด เวบ http://(raspberrypi ip)/gpslog.php
- เขียนโปรแกรม 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 ให้ลองศึกษาดู
สมัครสมาชิก:
ความคิดเห็น (Atom)