在 RPi3 上用Python寫 Bluetooth 程式

Raspberry Pi 3 開始加入 bluetooth 藍芽功能,就讓我們好好發揮這藍芽的功能吧!

以下為 ShengYu 的藍芽系列教學 (陸續更新中…):

在寫 Python 藍芽程式之前需要安裝一些套件,
安裝必需套件 bluez

1
sudo apt-get install python-bluez

如果要查看藍芽裝置資訊的指令可以看這篇

第一次用 Python 寫藍芽傳輸程式,請看這
Python 的第一支藍芽程式

怎麼用 Python 寫 Bluetooth socket 來通訊傳輸,請看這
Python 寫藍芽 RFCOMM 通訊程式
Python 寫藍芽 L2CAP 通訊程式

進階篇
Python 寫藍芽 Service Discovery Protocol 通訊程式

參考
https://people.csail.mit.edu/albert/bluez-intro/

相關主題
Python 第一支 Python 程式

在 RPi3 下使用命令列設定 WiFi

Setting RPi3 WiFi via the command line

掃描 AP

1
sudo iwlist wlan0 scan

編輯設定檔

編輯 wpa_supplicant.conf

1
sudo vim /etc/wpa_supplicant/wpa_supplicant.conf

加入 AP ssid 與 密碼

1
2
3
4
network={
ssid="testing"
psk="testingPassword"
}

如果密碼不想用明碼, 可以用 wpa_passphrase 這個工具, 產生出來的亂碼(誤)在貼上去就可以了!

重啟 WiFi

1
2
sudo killall wpa_supplicant
sudo wpa_supplicant -B -c/etc/wpa_supplicant/wpa_supplicant.conf -iwlan0 -Dnl80211,wext

參考文章
https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md

GIMP 圖片裁切

本篇介紹 GIMP 圖片裁切,GIMP 功能太多,裁切很常用到,每次都會忘記在選單的哪個位置,這次決定紀錄起來!

從下圖找到裁切工具,然後在圖片上選取裁切範圍,如果沒有這個工具箱視窗的話,要到 視窗>新增工具箱Ctrl+B 叫出來,

之後可以在裁切選項上微調,例如調整長寬.

確定裁切完畢後按 Enter,之後按匯出為(Export As…)圖片即可。

以上就是 GIMP 圖片裁切介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它相關文章推薦
GIMP 去背/去除背景

爬蟲教學 (Python)

安裝爬蟲常用到的套件

1
2
3
pip install requests
pip install beautifulsoup4
pip install lxml

文章列表

爬蟲教學 CrawlerTutorial
[第 16 天] 網頁解析
Downloading Files from URLs in Python
如何抓取591租屋網的資訊?
Python進度條-progressbar2模塊

Day8:Python requests + bs4 實作模擬登入網站並爬取資料|Kearch 1.0 爬蟲關鍵字報表工具
Day6:安裝 Python Jupyter Notebook 及了解python scrapy|KeywordSearch 1.0 爬蟲關鍵字報表工具

投影片

Python爬蟲實戰 slide
正規表示式 p49 - p65

Thread 類

Multithreaded Crawler in Python
A multi-threaded Web crawler implemented in Python
A simple example of a Python multithreaded crawler

有趣的應用

學爬蟲可以幹麻咧?可以參考下列例子.
硅谷碼農用Python寫了個機器人,租到了讓女友滿意的房子

Hexo 使用 Google Analytics 進行網站流量分析

先到 Google Analytics 首頁 登入或建立帳戶,新增一個資源,填完以後按取得追蹤編號.
填入帳號名稱、網站名稱和網址 即可按下取得追蹤編號
之後把追蹤編號 UA-xxxxxxxx-x 填入 themes/landscape/_config.yml (我使用的主題為 landscape)

1
google_analytics: UA-xxxxxxxx-x

(追蹤程式碼我是覺得不用貼, 因為)
themes/landscape/layout/_partial/head.ejs 裡有下列這段程式碼

1
<%- partial('google-analytics') %>

會引入 themes/landscape/layout/_partial/google-analytics.ejs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<% if (theme.google_analytics){ %>
<!-- Google Analytics -->
<script type="text/javascript">
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');

ga('create', '<%= theme.google_analytics %>', 'auto');
ga('send', 'pageview');

</script>
<!-- End Google Analytics -->
<% } %>

看起來 landscape 主題已經有支援 Google Analytics 了, 所以只要在 landscape 主題的 _config.yml 填好 google_analytics 就可以了
之後進 Google Analytics 帳戶頁面 選 即時 > 總覽
再另外開個分頁瀏覽你自己的網站看看有沒有 線上使用者 跟 流量 測試一下就搞定了!

目前 Google 官方已經有出 Google Analytics Mobile App 了,可以看這篇介紹。

參考
在 Hexo 使用 Google Analytics

相關文章
Hexo 本機測試時如何關閉 Google Analytics
Hexo codeblock 插入程式碼區塊與各種程式語言預覽
Hexo 熱門主題列表
升級更新 Hexo upgrade
Ubuntu 安裝 Hexo
Mac OS 安裝 Hexo

Use MPU6050 (GY-521) on the Arduino

官方網站的 MPU6050 介紹
https://playground.arduino.cc/Main/MPU-6050

系統環境

  • Arduino 1.8.3
  • Processing 3.3.5

Arduino 與 MPU6050 的接法

1
2
3
4
5
VCC <---> 3.3V / 5V (GY-521 上有 voltage regulator)
GND <---> GND
SDA <---> A4
SCL <---> A5
INT <---> D2

MPU6050 吐出 Raw Data

下載i2cdevlib
使用裡面附的 MPU6050_raw.ino 範例
Setp 1. 把 i2cdevlib/Arduino/I2Cdev 放到 ~/Arduino/libraries/
Setp 2. 把 i2cdevlib/Arduino/MPU6050 放到 ~/Arduino/libraries/
Setp 3. 打開 arduino > Examples > MPU6050 > MPU6050_raw.ino 編譯上傳即可
Setp 4. 打開 Serial Monitor 調整一下 baud rate (MPU6050_raw.ino 範例是使用 38400), 就可以看到資料一直吐出來了!

顯示 IMU 姿態在畫面上

使用 MPU6050_DMP6.ino 配合 processing IDE 的 Toxi 函式庫

Setp 1. 修改 MPU6050_DMP6.ino 與上傳
註解下段 code

1
//#define OUTPUT_READABLE_YAWPITCHROLL

解開下段 code

1
#define OUTPUT_TEAPOT

Setp 2. 下載 processing IDE 安裝 Toxi 函式庫
下載 Toxi 函式庫 toxiclibs-complete-0020.zip

將 toxiclibs-complete-0020 資料夾解壓縮放到 ~/sketchbook/libraries/
i2cdevlib/Arduino/MPU6050/examples/MPU6050_DMP6/Processing/MPUTeapot/MPUTeapot.pde 放到 ~/sketchbook/examples/MPUTeapot/MPUTeapot.pde

Setp 3. 用 processing IDE 打開 MPUTeapot.pde 按 run
也可以指定com port:

1
2
3
String portName = Serial.list()[0];
把上列修改成下面
String portName = "/dev/ttyACM0"; // or /dev/ttyUSB1

PS. 約需10秒才會穩定,待穩定後可翻轉 GY-521

改造 Google Daydream controller

How I hacked Google Daydream controller (Part VI)
這篇作者是在 Hack Google Daydream Controller, 讓 Controller 有 6DoF 的能力.
簡單說就是 Google Daydream Controller 只有 3DoF, 裡面的 IMU 只能算出旋轉(orientation)沒有位移(position).
所以作者加工了一下, 加上一個會發光的乒乓球, 再透過攝影機捕捉影像經過影像處理的方式計算出 Controller 上光球的 position,
進而達到 6DoF Controller, 有 orientation 也有 position.

內文作者提到 “VR will be big but AR will be bigger and take longer.” 這句話很有意思, 我個人也覺得 AR 應該要很有市場才對.

最後覺得這篇作者太強了, 竟然還利用 touchpad 來寫英文字作為輸入方式, 超酷的整合應用!

還用了 socket.io 加 bootstrap 技術, 把收到的 IMU 資訊圖形化的方式顯示在網頁上.
socket.io 看起來是 node.js 的 socket 通訊函式庫.
bootstrap 是個製作網頁的 Framework.
改天來學習學習!

IMU 硬體比較

MPU9150 是只支持 I2C
MPU9250 是支持 SPI/I2C 兩種方式

MPU9150 裡面是 MPU6050+AK8975,
MPU9250 裡面是 MPU6500+AK8963,
前者性能上要高一些,後者主打低功耗方面的,各種參數要略低一些,比如喚醒速度等。具體請對照數據手冊。

IMU Sensor Fusion Algorithm Survey

Sensor Fusion
AHRS和imu的比較和加速度陀螺儀的融合
VR中的9軸傳感器(重力加速度/陀螺儀/磁力計).md
這篇看起來很厲害, 有空看看 , 裡面有介紹 Oculus融合算法
還順便介紹了三種演算法:

VR技術研究—9軸融合算法—磁力計校準(一)
VR技術研究—9軸融合算法—磁力計校準(二)
四元數AHRS姿態解算和IMU姿態解算分析
Re: [問題] 六軸IMU使用

重力加速度陀螺儀傳感器MPU-6050 中譯手冊