Using smart phone (Android) to control LED on Raspberry Pi 3 through Bluetooth connection

Using smart phone (Android) to control LED on Raspberry Pi 3 through Bluetooth connection

IMG_20160303_122623

หลังจากที่ผมได้สั่งซื้อ RPi3 มาดองซักระยะนึงแล้ว คิดว่ารสชาติน่าจะเปรี้ยวได้ที่ ก็เลยนำมาทดลองเขียนโปรแกรมที่ทุกคนต้องเคยได้ทดลองหัดเขียนตอนเริ่มเขียนโปรแกรมกันใหม่ๆนั่นก็คือ…….โปรแกรมปิดเปิดไฟLED…นั้นเองๆๆๆ แต่คราวนี้เรามาลองใช้ Feature ใหม่ของ RPi 3 คือเจ้า Bluetooth ส่วน WiFi 802.11n นั้นเราจะยังไม่พูดถึงเพราะเพื่อนๆคงใช้งานกันคล่องแล้ว

Scenario สถานการณ์

โจทย์ของเราก็คือเราอยากจะใช้โทรศัพท์มือถือที่มี Bluetooth เชื่อมต่อกับ Bluetooth ของ RPi3 และควบคุมสั่งปิดเปิดไฟ LED ตามต้องการ เราสามารถขยายผลไปควบคุมอุปกรณ์อื่นๆเช่น ปิดเปิดไฟบ้าน เครื่องใช้ไฟฟ้า เช่นเดียวกับเพื่อนๆเหล่า Maker ที่ใช้ ESP8266 ควบคุมปิดเปิดไฟผ่านสัญญาณ WiFi

อุปกรณ์ฮาร์ดแวร์

  1. Raspberry Pi 3
  2. Smart Phone Android
  3. LED

ซอฟต์แวร์

  1. Blue term (Bluetooth terminal)

ขั้นตอนทดสอบ RPi3 Bluetooth

เริ่มต้นให้เราทำการทดสอบ Bluetooth ในตัว RPi3 ของเราทำงานหรือไม่หลังจากที่เรา Install Pi OS (Raspbian) ตัวล่าสุด (v 1.8.0) https://www.raspberrypi.org/downloads/noobs/

ใช้คำสั่งทดสอบ Bluetooth

pi@raspberrypi ~ $ hciconfig
 14-03-2016 21-24-08

ตามภาพด้านบนเราจะเห็นว่า Bluetooth เราทำงานอยู่ UP RUNNING และหมายเลข Bluetooth Address คือ E8:27:EB:6C:57:A1

ขั้นตอนการ Install Bluez

เราต้องInstall Bluz ให้กับ RPi เพื่อที่เราจะสามารถจัดการ หรือเชื่อมต่อ Bluetooth กับอุปกรณ์อื่นๆได้ง่ายๆจากหน้าต่าง Bluetooth Manager ใน Raspbian

ใช้คำสั่ง

sudo apt-get install bluetooth bluez blueman

ทำการReboot และเข้าไปที่ Pi OS กัน ให้ไปที่เมนู Menu>Preferences>Bluetooth Manager

14-03-2016 20-59-42

จากนั้นให้กดปุ่ม Search ค้นหาอุปกรณ์ Bluetooth ที่อยู่ใกล้ๆ

14-03-2016 21-11-18

ที่มือถือของเราผมกดเครื่องหมายถูกเพื่อให้ RPi มองเห็นมือถือของเราด้วยในขณะที่ทำการ Scan

Screenshot_2016-03-14-21-11-48

หลังจากนั้นเราจะเห็นว่า RPi ค้นเจออุปกรณ์ต่างๆ รวมถึงมือถือของเราด้วย (Spidy Mobile)

14-03-2016 21-12-08

ให้เราเลือกอุปกรณ์ที่จะเชื่อมต่อ คลิ๊กขวาแล้วเลือก Pair หรือ กดเครื่องหมาย กุญแจ เพื่อทำการเชื่อมต่อ RPi กับ มือถือของเรา

14-03-2016 21-12-31

หลังจากนั้นจะมีข้อความหมายเลขเข้ามาที่มือถือเราเพื่อถามให้ทำการยืนยันการเชื่อมต่อ และในหน้าจอ RPi ก็จะมีข้อความเข้ามาที่มุมขวาบนเพื่อให้ยืนยันการเชื่อมต่อเช่นกัน

***จุดนี้ให้เรา กดปุ่มยืนยันที่ RPi ก่อน แล้วค่อย กดปุ่มยืนยันที่มือถือเรา***

15-03-2016 12-22-29

15-03-2016 12-22-49

ตอนนี้มือถือของเรากับเจ้า RPi ก็จับมือทำความรู้จักกันแล้ว เย้ๆๆ

เริ่มเขียนโปรแกรม Python เชื่อมต่อ Bluetooth

การเขียนโปรแกรม Python ให้เชื่อมต่อกับ Bluetooth ได้นั้นต้องทำการลง Lib ที่ RPi ก่อนโดยใช้คำสั่ง

sudo apt-get install python-bluetooth

หลังจากนั้นให้เราเปิดโปรแกรม Text Editor เพื่อเขียนโปรแกรมกัน ในที่นี่ผมใช้ Atom https://atom.io/

โปรแกรมที่เขียนจะเป็นการรัน Bluetooth Sever ไว้ที่ตัว RPi เพื่อคอยรับสัญญาณการร้องขอเพื่อทำการเชื่อมต่อจากมือถือเรา และเมื่อเชื่อมต่อสำเร็จก็จะทำการรับค่าและแสดงผลตัวอักษรในหน้าต่าง RPi console จากการที่เรากดคีย์บอร์ดในมือถือส่งเข้ามา ผมได้ดัดแปลงโปรแกรมจาก https://people.csail.mit.edu/albert/bluez-intro/x232.html เล็กน้อยให้ว่าถ้าเรากดตัวอักษร “e” จะให้หลุดจากการเชื่อมต่อ

15-03-2016 10-34-46

import bluetooth

server_sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )

port = 1
server_sock.bind(("",port))
server_sock.listen(1)

client_sock,address = server_sock.accept()
print "Accepted connection from ",address
while True:

 data = client_sock.recv(1024)
 print "received [%s]" % data
 if (data == "e"):
 print ("Exit")
 break

client_sock.close()
server_sock.close()

ลองรันโปรแกรมเลยครับ เมื่อเรารันโปรแกรมแล้ว RPi คอยรอเรียกการเชื่อมต่อ…..

การใช้ Blue Term app

15-03-2016 09-06-24

ตอนนี้ให้เราเปิดโปรแกรม app Blue Term ในมือถือของเรา

15-03-2016 10-42-59

Screenshot_2016-03-14-20-37-19

ตอนแรกเราจะเห็นสถานะด้านขวาบนของapp แสดงการยังไม่เชื่อมต่อ not connected

ให้เรากดปุ่ม Options menu ที่มือถือเรา (ผมใช้ SS S5 กดค้างที่ด้านซ้ายล่าง)

Screenshot_2016-03-14-20-37-29

เมื่อ Options menu ขึ้นมาแล้วให้กด Connect Device

Screenshot_2016-03-14-20-37-41

เราจะเห็น raspberrypi อยู่ใน List ให้เรากดเลือกได้เลยครับ หลังจากนั้นหน้าจอด้านขวาบนของ app จะโชว์ connected: raspberrypi

ให้ดูที่ console window RPi จะโชว์ว่าได้เชื่อมต่อกับมือถือของเราแล้ว

15-03-2016 10-54-52

ลองส่งข้อความไปดูครับ และถ้าเรากดตัวอักษร “e” จะให้หลุดจากการเชื่อมต่อดังภาพ

15-03-2016 10-40-18

เขียนโปรแกรม Python เชื่อมต่อ Bluetooth ควบคุมสว่าง/ดับ LED

เมื่อเราสามารถส่งตัวอักษรไปที่ RPi ได้แล้วเราก็ลองมาเขียนโปรแกรมสร้าง Conditions เพื่อดักตัวอักษรที่เราพิมพ์เข้ามาว่าถ้าเราพิมพ์ “1” ให้ไฟสว่าง ถ้าเราพิมพ์ “0” ให้ไฟดับ และถ้าพิมพ์ “5” ให้กระพริบ โดยเราจะเขียน function Blink มาเพื่อกำหนดความถี่และจำนวนในการกระพริบของ LED ได้

ในที่นี่เราจะต่อวงจรดังภาพโดยใช้ GPIO18

15-03-2016 11-01-37

ลองพิมพ์โค้ดดังภาพ

15-03-2016 11-07-39

import bluetooth
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(18,GPIO.OUT)

def Blink(numTimes,speed):
 for i in range(0,numTimes):
 GPIO.output(18,True)
 print "Blinking " + str(i+1)
 time.sleep(speed)
 GPIO.output(18,False)
 time.sleep(speed)
 print ("Done Blinking LED")

server_sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )

port = 1
server_sock.bind(("",port))
server_sock.listen(1)

client_sock,address = server_sock.accept()
print "Accepted connection from ",address
while True:

 data = client_sock.recv(1024)
 print "received [%s]" % data
 if (data == "1"):
 print ("LED ON")
 GPIO.output(18,GPIO.HIGH)
 if (data == "0"):
 print ("LED OFF")
 GPIO.output(18,GPIO.LOW)
 if (data == "5"):
 print ("LED Blink")
 Blink(10,0.1)
 if (data == "e"):
 print ("Exit")
 break

client_sock.close()
server_sock.close()

เมื่อเขียนโปรแกรมเสร็จแล้ว ลองรันดูเลยครับ……เย้เย้….ควบคุมLEDได้แล้ว

15-03-2016 11-15-31

ลองชมวิดีโอได้ครับ

 

อ้างอิง References

http://www.thirdeyevis.com/pi-page-2.php

http://thepihut.com/blogs/raspberry-pi-tutorials/27968772-turning-on-an-led-with-your-raspberry-pis-gpio-pins

http://www.modmypi.com/blog/installing-the-raspberry-pi-nano-bluetooth-dongle

 

 

Advertisements

9 thoughts on “Using smart phone (Android) to control LED on Raspberry Pi 3 through Bluetooth connection

  1. Pingback: Control Raspberry Bluetooth – VanPhuong

  2. can you explain how do you do the android app?? use sockets there too or how??
    thanks for your soon replay…

  3. Can you expain how works the app? use a sockets there too? or how?
    because if use a another bluettooh app in the app store?? don’t work.. and the blue AP, don’t work in another phones…
    thanks for your replay…

  4. Hi,
    I’m working on an android application which is similar to this, I’ve tried communication using arduino and HC05, which worked successfully, But the same application isn’t working with raspberry pi. I tried the adafruit’s tutorial as well, but i’m really interested in the android application part here. Could you share some information about the kind of sockets you’re using here?

    Thanks

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s