Sunday, November 29

How to install Mosquitto MQTT Broker on RPi2

     เกริ่นนำสักนิดหนึ่ง ตั้งแต่ การเข้ามาของ IOT หรือ Internet of Things ที่กำลังอินเทรนกันอยู่ตอนนนี้ ก็ได้มีความพยายามที่จะหา Protocol ที่เหมาะสำหรับการสื่อสารผ่าน network กับอุปกรณ์พวกไมโครคอนโทรลเลอร์ ก็เลยมีการพัฒนาโปรโตคอลขึ้นมา เพื่อให้เหมาะกับอุปกรณ์เล็กๆ ที่ไม่ต้องการ Header ที่มากไปในการสื่อสารทางเนตเวิร์ก เจ้าโปรโตคอลที่ว่าก็คือ MQTT หรือ MQ Telemetry Transport ไม่รู้ว่าแปลว่าไรเหมือนกัน เอาเป็นว่า ผมอธิบายแบบบ้านๆ เลยหล่ะกัน

image

ในการสื่อสารแบบ MQTT นี้ จะต้องมี MQTT Broker ที่ทำหน้าที่รับข้อความโดยมีหัวข้อ Topic จากผู้ส่ง/จำหน่าย จ่ายแจก หรือ publisher แล้วกระจายส่ิงที่ได้รับมานั้นไปให้ subscriber ที่ได้ทำการลงทะเบียนหัวข้อ Topic นั้นแหละ บอกกับ Broker ไว้แล้ว ว่า ถ้า publisher คน/ตัว ใด ส่ง topic นี้มา ให้เอามาให้ฉัน (subscriber)

อ่านเพิ่มเติม เรื่อง MQTT Protocol ที่รวบรวมไว้ครับ

ตรงส่วน Broker นี้แหละ ที่เราจะเอา Raspberry pi มาทำเป็น MQTT Broker ในที่นี้ ผมใช้ RPi2 ที่ติดตั้ง Raspbian Wheezy

การติดตั้ง MQTT Broker บน RPi
- ทำการ อัพเกรดต่างๆ ก่อน นานหน่อยสำหรับคนที่ไม่ค่อยได้อัพเกรดบ่อย

sudo apt-get upgrade


- แล้วก็รันคำสั่งตามนี้เลยครับ ทีละบรรทัด นะ ใจเย็นๆ ดู Error ด้วย ถ้ามันมี
curl -O http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
sudo apt-key add mosquitto-repo.gpg.key
rm mosquitto-repo.gpg.key
cd /etc/apt/sources.list.d/
sudo curl -O http://repo.mosquitto.org/debian/mosquitto-wheezy.list
sudo apt-get update
sudo apt-get install mosquitto mosquitto-clients

บน Rpi เราจะมีทั้ง Mosquitto ที่เอาไว้จัดการ MQTT protocol โดยจะทำให้ Rpi เรากลายเป็น MQTT broker และนอกจากนั้น เราได้ติดตั้ง  mosquitto-clients ซึ่งจะทำให้เราสามารถสั่งให้ Rpi เราเป็นได้ทั้ง subscriber และ publisher ได้อีกด้วย

อันนี้ เป็นคลิปวีดีโอทดสอบของผม ผมลองกับเจ้า ESP8266 และโปรแกรมต่างๆ บน PC โดยทำการ subscribe หัวข้อ topic ที่ชื่อ hello/world ที่ถูกส่ง publish มาจาก ESP8266 โดยที่ RPi ทำหน้า MQTT Broker จัดการรับส่งข้อความทาง MQTT Protocol นั่นเอง

Raspberry pi MQTT_Broker

Youtube : www.youtube.com/watch?v=RvNBlkpGZwU

เรื่องราวมันค่อนข้างยาวนิดนึง เดี๋ยวไว้หาเวลาว่างๆ มาเล่าต่อ แล้วกัน หรือไม่ก็อ่านจากลิ้งค์ที่แปะไว้ด้านล่างนี้แล้วกันครับ

อ้างอิง :

http://jpmens.net/2013/09/01/installing-mosquitto-on-a-raspberry-pi/
http://www.penninkhof.com/2015/05/linking-the-esp8266-a-raspberry-pi-through-mqtt/

อ่านเพิ่มเติม...

Thursday, November 5

Timezone and NTP server Thailand

เราสามารถตั้งค่า Timezone ให้ Raspberry pi ของเราให้เป็น Timezone สำหรับประเทศไทยได้ ด้วยการแก้ไข config

sudo raspi-config

raspi-config timezone

เลือก Internationalisation Options แล้วเลือก  Change Timezone 

raspi-config timezone

จากนั้นเลือก Asia แล้วกด Enter แล้วเลือก Bangkok  Raspberry pi ก็จะปรับเวลาให้ตรงตามเวลาประเทศไทย

เราสามารถที่จะ config ให้ Raspbery pi ไปอัพเดทเวลาจาก NTP server ของประเทศไทยได้ โดยไปแก้ไขที่

sudo nano /etc/ntp.conf

Thailand NTP server list

ทำการ comment ของเก่า แล้วเพิ่มของใหม่เข้าไป ตามภาพ  ซึ่งมีรายชื่อ NTP server  ดังนี้

server 0.th.pool.ntp.org iburst
server 1.th.pool.ntp.org iburst
server 2.th.pool.ntp.org iburst
server 3.th.pool.ntp.org iburst

ทำการบันทึกไฟล์ ntp.conf  แล้วทำการ restart ntp service ด้วยคำสั่ง

sudo /etc/init.d/ntp restart 


และใช้คำสั่งเช็คดูการทำงานของ ntpd service และประสิทธิภาพการ sync เวลากับ NTP server



sudo ntpq -c lpeer  


และใช้คำสั่ง date เช็คเวลาดูอีกที ว่าตรงหรือยัง



เราสามารถเช็คการทำงานของ ntpd ได้ ด้วยการดูที่ syslog ด้วยการใช้คำสั่ง



tail –f /var/log/syslog  หากเห็นข้อความ  host name not found EAI_NODATA: 0.th.pool.ntp.org ให้ทำการเช็คที่ resole.conf



NTP sync issue



sudo nano /etc/resole.conf



config nameserver



แก้ไข nameserver ให้ถูกต้อง ตามรูป  ก็น่าจะโอเค แหละ ให้ restart ntpd service อีกครั้ง  คราวนี้ เวลาของ Raspberry pi ก็จะเดินตรงกับเวลาประเทศไทยแหละ



วันนี้ จบเพียงเท่านี้ ก่อน

อ่านเพิ่มเติม...

Sunday, October 25

mysql replication on raspberry pi

mysql replication on raspberry pi    Mysql server เป็นฐานข้อมูลที่นิยมใช้กันอย่างแพร่หลาย เพราะ ฟรี และรองรับการเชื่อมต่อที่เยอะๆ ได้อย่างดีเยี่ยม และใน Raspberry pi ของเราเอง ก็สามารถติดตั้ง MySQL server ได้อยู่แล้ว ณ ตอนนี้ หากติดตั้ง เราจะได้ mysql server v 5.5 up 

   เราสามารถใช้บอร์ด raspberry pi ของเราในการเก็บข้อมูลไว้ใน MySQL ได้เลย และสามารถให้ user เข้ามาเรียกดูข้อมูลได้ผ่านทางหน้าเว็บ CGI มา query ข้อมูลออกจากฐานข้อมูล ไปแสดงผลบนหน้าเว็บอีกที หรือใช้ IDE พวก mysqlworkbench , mysqlfront ในการเขียน sql ดึงข้อมูลไปใช้งานอีกทีก็ได้ แต่กระนั้นก็ตาม การที่เราจะปล่อยให้เจ้า raspberry pi ของเรา รองรับจำนวน user ที่ต้องเรียกดูข้อมูล โดยที่จำนวน user มีจำนวนการเชื่อมต่อที่เพิ่มมากขึ้น จำนวนครั้งในการเรียกดูมากขึ้น แล้วมาดึงข้อมูลจากบอร์ด raspberry pi ตรงๆ อาจจะไม่ค่อยจะดีเท่าไหร่นัก แลดูจะเกินประสิทธิภาพของบอร์ดไปสักหน่อย แต่ ถ้าเราจะเก็บไว้ดูคนเดียวก็ไม่เป็นไร

   หากเราต้องการที่จะทำการสำรอง หรือต้องการให้ user ทำการเรียกค้นข้อมูลจากฐานข้อมูลแม่ข่ายเครื่องอื่นหล่ะ โดยข้อมูลที่เรียกดู ก็เหมือนข้อมูลที่อยู่ใน raspberry pi หล่ะ เราจะทำอย่างไร

    ใน mysql มีวิธีการหนึ่งที่เรียกว่า replication คือ การที่เครื่อง slave server มีข้อมูลเหมือนกับ master server และเมื่อ master server มีการเปลียนแปลงข้อมูลภายใน field ข้อมูลนั้นจะถูกอัพเดทไปที่ slave server ทันที โดยที่เราไม่ต้องเขียน script crond job เพื่ออัพเดทข้อมูลในฐานข้อมูลเลย ดังนั้น จึงมั่นใจได้ว่า ข้อมูลทั้ง สองแม่ข่าย ระหว่าง  master server และ slave server จะเหมือนกันแป๊ะ และนอกจากนั้น เรายังสามารถเพิ่มจำนวน slave server ได้อีกด้วย ข้อมูลไม่สูญหายแน่ๆ หากเกิดความดผิดพลาดกับ master server หรือ slave server บางตัว

   ในทีนี้ ผมจะทดลองใน local network ก่อน โดยที่ Raspberry pi ของผม มี IP เป็น 192.168.2.109 โดยเราจะให้เป็น master server ส่วน PC ของผมจะให้เป็น Slave server ซึ่งเป็น IP 192.168.2.101 โดยทั้งคู่ได้ติดตั้ง mysql server ไว้อยู่แล้ว เป็นเวอร์ชั่น 5.5 ขึ้นไป 

ขั้นตอนแรก ให้เราทำการ config /etc/mysql/my.cnf ที่อยู่บน raspberry pi ก่อน

sudo /etc/init.d/mysql stop   หยุดการทำงานของ mysql ก่อน

sudo nano /etc/mysql/my.cnf  

จากนั้นมองหา [mysqld] แล้วเพิ่มค่าเข้าไป

log-bin=mysql-bin
server-id=1
innodb_flush_log_at_trx_commit=1
sync_binlog=1

ทำการบันทึกไฟล์ แล้วสั่งให้ mysql ทำงาน หากไม่มีอะไรผิดพลาด เราน่าจะสั่ง start service mysql ได้

sudo /etc/init.d/mysql start

จากนั้น เราจะทำการเพ่ิม user สำหรับให้ slave เป็น user account สำหรับเข้ามา replicate ข้อมูลจาก master โดยการเพิ่ม user ดังนี้  ยังอยู่ที่ raspberry pi อยู่นะครับ  พิมพ์คำสั่งที่ console

mysql –uroot –p  แล้วกด enter ถ้ามันถามหา password ก็ใส่ password ไป สำใครที่ตั้ง password  เมื่อเข้าไปแล้ว  prompt เราจะกลายเป็น mysql>  ให้เราสร้าง user ด้วยคำสั่ง sql ต่อไปนี้

mysql>CREATE USER 'repl'@'192.168.2.101' IDENTIFIED BY 'merlin';

mysql>GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.2.101';

เรากำลังเพิ่มให้มี user ชื่อ repl โดยสามารถเชื่อมต่อมาจาก ip 192.168.2.101 เท่านั้น ซึ่งก็คือเครื่อง slave ของเรา กำหนดให้ password คือ merlin

ต่อมา ให้สร้างจุด Check Point เพื่อให้เป็นจุดเริ่มต้นสำหรับการ Replicate โดยใช้คำสั่ง sql

mysql>FLUSH TABLES WITH READ LOCK;
mysql>SHOW MASTER STATUS;
mysql>UNLOCK TABLES;

mysql replication on raspberry pi

ค่า   mysql-bin.000003 และ 2717  ให้จดจำค่านี้ไว้ ไปกำหนด ที่ฝั่ง slave

อันดับต่อไป เราจะมา config ค่าที่เครื่อง slave กันบ้าาง โดยที่เครื่อง slave ของผมนี้ เป็น windows 7 ที่ติดตั้ง xampp ไว้อยู่แล้ว ซึ่งใน xampp จะมี mysql server มาให้อยู่แล้ว การกำหนดค่า config สำหรับบน windows นั้น จะอยู่ที่ไฟล์ my.ini ซึ่งจะแตกต่างออกไปจากของ linux 

ทำการหยุด service ของ mysql ก่อน ถ้าเป็น xampp เราก็กดปุ่ม stop ได้เลย ดังภาพ แล้วทำการเปิดไฟล์ my.ini

mysql replication on raspberry pi

มองหา [mysqld] แล้วทำการเพิ่ม หรือ uncomment หากมันมีอยู่แล้ว ให้ได้ตามนี้ ครับ

server-id=2 อาจจะต้อง comment บรรทัดที่มันเขียนว่า server-id=1 ถ้ามันมีอยู่  บันทึก และทำการ start service mysql ขึ้นมา หากไม่มีอะไรผิดพลาด เราน่าจะ start mysql service ได้

เพื่อนๆ อาจจะใช้ mysqlfron เพื่อเชื่อมต่อกับ mysql ที่เครื่อง slave เพื่อรันคำสั่ง sql ต่อไปนี้

mysql>CHANGE MASTER TO

  MASTER_HOST='192.168.2.109',

  MASTER_USER='repl',

  MASTER_PASSWORD='merlin',

  MASTER_PORT=3306,

  MASTER_LOG_FILE='mysql-bin.000003',

  MASTER_LOG_POS=2717,

  MASTER_CONNECT_RETRY=10;

จะเห็นว่า เราต้องเอาค่า mysql-bin แล้ว position จากข้อที่แล้ว มากำหนดในการสั่งให้ slave มองไปที่ master ตรงตำแหน่ง checkpoint ที่ได้

จากนั้น เริ่มทำการ replicate ด้วยคำสั่ง sql ดังนีั้

mysql>start slave;

mysql>show slave status;

ทดสอบแล้วเปลี่ยนแปลงข้อมูลภาพใน field ใน table ใดก็ได้ ใน master ซึ่งก็คือ Raspberry pi ของเรา และสังเกตผลลัพธ์ที่เกิดขึ้นที่ slave ซึ่งก็คือ pc ของเรา จะพบว่า ข้อมูลจะเปลี่ยนแปลงตาม master ทันที โดยที่เราไม่ต้องมานั่งกังวลกับการเขียน script crond job เพื่อทำการอัพเดทขู้อมูล หรือทำการ backup เลย และก็ไม่ต้องกังวลว่า จะต้องเปิดเครื่อง slave ไว้ตลอดหรือเปล่า เราอาาจะปิดเครื่อง slave ไปก็ได้ และเมื่อเปิดเครื่อง slave มา มันก็จะทำการเช็คว่า master มีอะไรเปลี่ยนแปลงไปจากล่าสุดที่มันเคยเช็คหรือเปล่า  ถ้ามี มันก็จะทำการ replicate ให้ทันที 

ประโยชน์ที่คิดว่าจะได้รับ ก็ตามนี้

The target uses for replication in MySQL include:

 

   Scale-out solutions - spreading the load among multiple slaves to improve performance. In this environment, all writes and updates must take place on the master server. Reads, however, may take place on one or more slaves. This model can improve the performance of writes (since the master is dedicated to updates), while dramatically increasing read speed across an increasing number of slaves.

 

   Data security - because data is replicated to the slave, and the slave can pause the replication process, it is possible to run backup services on the slave without corrupting the corresponding master data.

 

   Analytics - live data can be created on the master, while the analysis of the information can take place on the slave without affecting the performance of the master.

 

   Long-distance data distribution - if a branch office would like to work with a copy of your main data, you can use replication to create a local copy of the data for their use without requiring permanent access to the master.

อ้างอิง :

http://dev.mysql.com/doc/refman/5.0/en/replication.html

http://www.wandee.org/wordpress/?p=158

อ่านเพิ่มเติม...

Friday, June 5

How to connect mysql-server (config my.cnf)

       ใน Mysq-server ที่ติดตั้งบน Raspbian ตัวล่าสุดจะเป็น mysql server เวอร์ชั่น Server version: 5.5.43-0+deb7u1 (Debian) ซึ่งจะไม่รองรับวิธีการเชื่อมต่อแบบ HTTP Tunnel แบบเก่าของเราซะแล้ว แต่ก็ยังมีทางอื่นอยู่ โดยเราจะกลับมาเชื่อมต่อผ่าน PORT 3306 เหมือนเดิม แต่ โดยปกติแล้ว จะรีโมทจากภายนอกเข้ามาทาง Port 3306 ของ Raspberry pi ไม่ได้ ต้องทำการแก้ไขไฟล my.cnf ซะก่อน

ทำการแก้ไขไฟล์ my.cnf (โปรดกระทำด้วยความระมัดระวัง) 

sudo nano /etc/mysql/my.cnf

มองหาบรรทัดที่เขียนว่า “bind-address”  ปกติมันจะมีค่าเป็น 127.0.0.1 หรือไม่ก็ localhost ให้ทำการแก้ไขเป็น IP address ของ Raspberry pi ในที่นี้ เราได้ทำการ Fix IP address ของ Raspberry pi เป็น 192.168.2.107 (วิธีการ Fix IP address

 sudo nano /etc/mysql/my.cnf
บันทึกไฟล์กด Ctrl+X แล้วตอบ Y  จากนั้นให้ทำการ restart service mysql

sudo service mysql restart

sudo service mysql restart

กลับมาที่เครื่องเรา ให้เปิดโปรแกรมที่จะทำการเชื่อมต่อกับ Mysql server บน Raspberry pi ในทีนี้ผมจะลองใช้ MySQL Workbench หลังจากติดตั้งแล้ว ให้ไปที่เมนู Database –> Connect Database แล้วตั้งค่าดังรูป อย่าลืมก่อน connect ให้เพิ่ม root@’%’ บน Mysql server ก่อนนะ

MySQL workbench connect MySQL server raspberry pi

หรือจะกลับมาตั้งค่าบน Mysql-front ก็ทำได้เช่นเดียวกัน เพราะ เราได้ไปแก้ไขบนไฟล์ my.cnf เรียบร้อยแล้ว

Mysql-front connect MySQL server raspberry pi

อ่านเพิ่มเติม...

How to format micro sd-card for raspbian OS

            เมื่อเร็วๆนี้ ผมเจอว่า เจ้า Rasbian OS มันพัง จึงจำเป็นต้องทำการ Write image file เจ้า raspbian ใหม่ ในตอนแรก ก็ดันจำไม่ได้ซะด้วย ว่าลงโปรแกรมยังงงัย ก็ทำการถอด micro sd-card มาทำการ format ก็แปลกใจ เอ๊ะ ทำไม มันเห็นแค่ 55.6MB แต่ ก็ช่างมันเหอะ ไม่น่าจะเป็นอะไร ก็เลย จัดการเตรียมตัวที่จะ write image file ด้วยโปรแกรม Win32DiskImage ปรากฏว่า มันไม่ยอม มันฟ้อง Not enough space on  disk  เอาหล่ะสิ micro sd-card เสียหรือเปล่า ก็ลองหลายวิธี ก็ไม่สามารถติดตั้งได้

Micro sd-card not enough space on disk when write raspbian image file

    ปรึกษาเพื่อนสมาชิกใน Facebook แนะนำให้ลองโปรแกรม DiskPart ที่ติดอยู่กับ Windows 7  เฮ้ย มันใช้ได้เลย  ดีใจมาก เพราะนั่งเครียด ลองแล้วลองอีก ตั้งหลายวิธี ค้นหาใน Google ก็ไม่เจอวิธีที่มันโดนสักที วิํธีแก้ไข ก็ตามรูปเลย เปิด Command line ขึ้นมา แล้วก็พิมพ์คำว่า  Diskpart (ตัวเล็ก ตัวใหญ่ได้หมด)

list disk เพื่อค้นหาว่ามี disk อยู่กี่อันบนคอมพิวเตอร์

select disk=1 ทำการเลือก disk 1 ซึ่งเรามองดูแล้ว น่าจะเป็น micro sd-card เรานั่นแหละ ตรงนี้ ให้ระวัง อย่าเลือกผิด เดี๋ยวพลาดไปเลือกโดนฮาร์ดดิสก์หลัก แล้ว งานจะเข้า

list partition ทำการสั่งให้แสดง partition บน disk 1

ถ้ามี partition อยู่ก็ให้ clean ซะ

list partition อีกที ดูสิ หายไปไหม ถ้าหายไปแล้ว ก็ exit ออกไปได้เลย ไม่ต้องทำอะไรต่อ

กลับมาที่ Win32 Disk Image อีกที ลองทำการ Write Raspbian image อีกที่ สังเกตดูว่า ความเร็วในการ Write ไม่น่าจะเร็วมากนัก มันจะค่อยๆ ไป ช้าๆ น่าจะใช้ได้แล้วหล่ะ

แล้วก็ config raspbian อย่างรวดเร็วเหมือนตอนที่แล้ว ก็น่าจะโอเค แล้วหล่ะ

diskpart  clean partition on micro sd-card before write raspbian image file

อ่านเพิ่มเติม...

Sunday, May 24

Python Tips: Smart finding package from Error message

ตามนั้น (คลิกดูรูปใหญ่)

image

สติมา ปัญญาเกิด

อ่านเพิ่มเติม...

How to install raspian on RPi2 (Very fast guide)

ไม่พูดพร่ำทำเพลง มาถึงก็ลุยกันเลย


1 โหลดไฟล์ raspbian image file มาแล้ว ทำการ write ลง micro sd-card
2 เข้าไปแก้ไขไฟล์ cmdline.txt โดยเพิ่ม ip=192.168.2.105 เข้าไปที่ท้าย ระวังเรื่องอัขระแปลกๆ อย่าให้ปนเข้าไปด้วย เปิดดูใน notepad++ ให้แสดงอัขระทั้งหมด ถึงจะเห็น แล้วบันทึกไฟล์
3.นำ micro sd-card เสียบเข้าไปที่บอร์ด RPi2 เสียบสาย LAN เข้ากับ Router จ่ายไฟเข้าไป ปล่อยไว้สักพัก เราจะสามารถรีโมทผ่าน SSH ได้ โดย RPi จะมีค่า IP จากข้อ 2 (ต้องมั่นใจว่าไม่มีเครื่อง PC เครื่องไหนจอง IP นี้)
4 ทำการตั้งค่า raspi-config ตามใจชอบ
5 ทำการแก้ไขไฟล์ cmdline.txt กลับคืน โดยลบค่าจากข้อ 2 ทิ้ง  sudo nano /boot/cmdline.txt
6 ทำการตั้งค่า fix ip โดยแก้ไขที่ sudo nano /etc/network/interface

auto lo

iface lo inet loopback
iface eth0 inet static
address 192.168.2.105
netmask 255.255.255.0
gateway 192.168.2.1

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

7 ทำการแก้ไข เพิ่ม nameserver sudo nano /etc/resolve.conf
nameserver 192.168.2.1
nameserver 8.8.8.8
nameserver 8.8.4.4

รีสตาร์ท เป็นอันเสร็จเรียบร้อย ถ้าทุกอย่างตั้งค่าถูก เราจะสามารถทำ  sudo apt-get update ได้ โดยไม่ฟ้องอะไรที่ error เกี่ยวกับการติดต่อกับ server package ภายนอก

                                         http://raspberry-pi-th.blogspot.com/

อ่านเพิ่มเติม...

How to install DS3231 RTC high precision on Raspberry pi 2

ในบางงาน เราไม่สามารถให้ RPi ของเราเชื่อมต่อกับอินเตอร์เนตได้ แม้ว่า RPi จะต่ออยู่กับ local network ก็ตาม ดังนั้น นาฬิกาของ RPi อาจจะเดินไม่ตรงได้ เพราะ Rpi ใช้หลักการ crontab เพื่อทำการอัพเดทเวลาตนเองเป็นรายคาบ ดังนั้น หากให้เวลาเดินตรงๆ เราก็ต้องหา Hardware จริงๆ มาต่อ เพื่อสร้างฐานเวลาให้กับ RPi ในทีนี้ ผมได้เลือกใช้ DS3231 RTC High precision (เขาว่างั้นนะ)  มาทำเป็นฐานเวลาให้ RPi

ต่อวงจรตามรูป

Raspberry pi 2 with DS3231 RTC high precision

ที่ Raspberry pi หลังจากบูตมาแล้ว ให้ทำการ Enable I2C ด้วยคำสั่ง

#sudo raspi-config

ภายใต้เมนู Advace options จะมีให้เลือก Enable I2C ถามอะไรมา OK ให้หมด ไม่ต้องคิดมาก

เข้าไปเช็คที่ไฟล์ /boot/config.txt จะมีข้อความ อยู่บรรทัดสุดท้าย

dtparam=i2c_arm = on ปรากฏอยู่ ถ้าไม่มีก็เพิ่มซะ จะรออะไรหล่ะ

ทำการ #sudo reboot ซะ 1 ครั้ง

เสร็จแล้วเราก็จะมาบอกให้ Linux รู้จัก device ใหม่ ที่ address 0x68 บน I2C ด้วยคำสั่ง

#sudo modprobe i2c-bcm2708
#echo ds3231 0x68 > sudo tee /sys/class/i2c-adapter/i2c-1/new_device

ถ้า Enter คำสั่งนี้แล้วไม่มีข้อความแจ้ง Error แสดงว่าพิมพ์ถูกแหละ
ใช้คำสั่ง
#sudo hwclock  มันจะไปอ่านค่าเวลาจาก hardware ของเราในทีนี้ ก็คือ ds3231 นั่นแหละ จะนานหน่อย เวลาอ่านค่าเวลาจากมัน


แล้วเราก็เอาคำสั่งนี้แหละไปเพิ่มในไฟล์ /etc/rc.local เอาไว้ตอนที่มันบูทขึ้นมา จะได้จำได้ตลอด

#sudo nano /etc/rc.local

ให้เพิ่มข้อความนี้ ไว้ก่อน Exit 0

echo ds3231 0x68 > sudo tee /sys/class/i2c-adapter/i2c-1/new_device
sudo hwclock -s
Exit 0 <<< จะต้องอยู่ล่างสุด

หากเวลาเดินไม่ตรง เราสามารถใช้คำสั่ง

#sudo hwclock --set --date="2015-05-24 13:00:00"

ตั้งเวลาได้ แต่ ถ้าต่ออินเตอร์เนตอยู่ เราสามารถให้มัน sync กับ NTP server ก่อนได้ ด้วยคำสั่ง
#sudo ntpd -gq  ใช้เวลานิดหนึ่ง มันจะปรับเวลา ds3231 ให้ตรงกับ Timezone ของเรา
แล้วก็ write ค่าลง ds3231 ซะด้วยคำสั่ง
#sudo hwclock -w  ทันที

ขั้นตอนสุดท้าย เราต้องไป disable fake-hwclock เพื่อบอก RPi ว่า ตอนนี้เรามี Hardware ที่เป็น Clock จริงๆ แล้วนะ ไม่ต้องมาหลอกตัวเองอีกแล้ว ด้วยคำสั่ง

#sudo update-rc.d fake-hwclock disable
#sudo update-rc.d ntp disable

บันทึกเพิ่ม
ทำการติดตั้ง i2c-tools เอาไว้เช็คแอดแดรสของอุปกรณ์ที่ต่ออยู่กับ I2C
#sudo apt-get install i2c-tools

เราจะเรียกใช้คำสั่ง
#sudo i2cdetec -y 1 (1 สำหรับ RPi 2 )

ได้ ก็เห็น address ที่อยู่บน I2C bus ถ้าไม่แสดง ให้ทำการเช็คอุปกรณ์ที่ต่ออยู๋ ว่าไม่ได้เสีย หรือลืมจ่ายไฟเลี้ยง

ทำแล้วไม่เวิร์ก ลอง upgrade distro ดูครับ ผมก็ทำไม่เวิร์กเหมือนกันตอนแรก หลังจาก upgrade แล้วได้เลย

#sudo apt-get dist-upgrade

Raspberry pi 2 with DS3231 RTC high precision

 

ที่มา :
http://bohdan-danishevsky.blogspot.com/2014/12/installing-hardware-rtc-ds3132-to.html
http://www.drewkeller.com/blog/adding-hardware-clock-raspberry-pi-ds3231
http://www.bashpi.org/?page_id=500
https://learn.adafruit.com/adding-a-real-time-clock-to-raspberry-pi?view=all
http://decuser.blogspot.com/2015/02/raspberry-pi-b-i2c-and-ds3231-rtc.html

อ่านเพิ่มเติม...
 

แจกฟรี พื้นที่ฝากไฟล์ 15 GB

ติดตามข่าวสารผ่าน Twitter

ติดตาม Blog นี้

About Me

My photo

สวัสดีครับ ชื่อเปิ้ลนะครับ ถ้ามีอะไรให้ช่วยเหลือได้ ก็จะช่วยครับ
ผมได้สร้างบล๊อกไว้ เพื่อเก็บรวบรวมความรู้ และประสบการณ์ในการทำงานครับ แวะไปเยี่ยมชมกันได้ครับ http://mechacity.blogspot.com และบล๊อก http://faker-programmer.blogspot.com ครับ

Blog อื่นๆของฉัน

Microcontroller Electronics update

สถิติเยี่ยมชมบล๊อก