艾鍗學院
Linux系統程式設計師養成班
時間:2015/7/22
功能模組
溫度感測
LCD
顯示模組
IOT
網路連線
Lib_mpg123
Google TTS
Lib_Curl
語音發報
Lib_Parse
Lib_Jansson
Raspberry Pi 2
AM2320
LCM
Parse
Google TTS
SpkGPIO
Btn
I2C
TCP/IP
連線架構
溫度感測 譚建新
翁南陽
陳志專
LCD顯示 楊清銘
朱芫慧
語音發報 林銘貴
黃建雄
IOT連線 翁偉倬
張榮峰
專案成員
Main
Initial
Exceed
frequence limit?
Measure Temp
&Humidity
LCD display Temp
&Humidity
Upload Temp &
Humidity to Parse
Reset Read Period
No
Yes
Main loop
Button
Interrupt
Sound out
Button
PressedYes
No
Waiting
• 採用 AM2320 I2C介面溫濕度感測器
• 溫度量測範圍 -40度~ 80度C
• 溫度量測刻度 0.1度C
• 濕度量測範圍 0% ~ 99%
• 濕度量測刻度 0.1%
• 連接長度20米以下
溫溼度Sensor
• 經I2C介面讀取溫濕度感測器數值
• 主程式call API getHumidity的濕度值
• 主程式call API getTemperature()的溫度值
• 再顯示於LCM
• 再由主程式傳至雲端parse.com
程式模組功能
功能簡介
• 採用HD4478/ 1602 LCD Module 搭配艾鍗Rasp Pi I/O 板
• 將溫濕度感測器所得到的溫度/濕度顯示在LCD上
• 只使用4根GPIO, 使其LCM工作於4 BIT 的控制模式,節省寶貴的GIOP接腳
• 使用Driver 去呼叫Kernel API 的方式, 來做為溫濕度資料送出至LCD 顯示
• LCD功能模組化, 增加其維護跟開發彈性, 即時接收資料而顯示輸出
LCD顯示模組
方塊圖
LCD顯示模組
• LCD Module INTERFACE PIN FUNCTIONS (16 pins)
LCD顯示模組
程式的接腳設定
1.VSS- GND
2.VDD - POWER(3.3V or 5V)
3.VO - 螢幕對比調整
4.RS - 控制 指令 或 資料 的讀寫模式( BCM pin 20)
5. R/W - 控制 讀出 或 寫入 的讀寫模式(BCM pin 21)
6.E - 通知 LCD 模組 執行 動作(BCM pin 5)
7. D4 –D7 - (資料匯流排, 分接至GPIO BCM pin 6, 13.19.26,
工作於4BIT 模式)
完成方式
LCD顯示模組
• LCD驅動程式結構介紹
– 1. 定義為一個字元裝置型態
– 2. 向系統註冊一個driver
– 3. 註冊我們將提供的的服務
– 4. 服務內容規劃
• init – 當驅動程式載入後, 開始執行裝置的註冊程序
– GPIO PIN 的初始化
– LCD module 初始化設定4bit 工作模式
– LCD 顯示歡迎訊息, 溫濕度顯示格式
• exit –當驅動程式移除, 關掉LCD, 釋放系統資源. 釋放GPIO.
• open - LCD 被使用者程式用 fopen 之類的函式開啟時所執行的對應處理
函式
• close –當使用者程式關閉我們的 device 時執行的對應處理函式
• Ioctl –提供讓使用者程式傳送溫濕度資料與呼叫驅動程式內的溫濕度顯示
函數
LCD顯示模組
• 功能
– 函式提供文字轉語音的功能在 Raspberry Pi 上播放
• Google文字轉語音服務
– 利用Google文字轉語音服務 , 從網路下載語音
– 提供較佳的語音品質
– 可直接由URL 參數直接傳送文字
– 下載的語音為MP3格式
Text to Speech
Sound out
libao
libmpg123
libcurl
Audio
Raw
Stream
Mp3
Stream
Google
TTS url
Text
Text to Speech
• 實作
– 函式str_url負責將文字轉成URL
– 函式play_stream 將MP3 stream 聲音輸出
•MP3轉成audio raw stream—編入libmpg123
•聲音輸出—編入libao
– URL轉成MP3—編入libcurl
•CURLOPT_URL: 設定URL目標網址,
•CURLOPT_WRITEFUNCTION: 指到play_stream告訴程式要對傳回值作播放
Text to Speech
• 功能
– 提供按鍵功能,作為使用者介面
– 中斷即時觸發,觸發系統即時處理
Button Interrupt
• Kernel實作
– Kernel Space Driver
•在Module initial時加入Btn Device
•file_operations 加入 fasync 作為Signal 傳遞介面
– GPIO 中斷
•在Module initial時,註冊gpio_to_irq 作為Button中斷來源
•中斷函式中 呼叫tasklet_schedule(&mytasklet);
– Tasklet
•DECLARE_TASKLET
•Tasklet handler 中,呼叫kill_fasync(&my_async_list , SIGIO, POLL_IN)傳遞
Signal
Button Interrupt
• User Space實作
– 1. Establish a handler for the signal delivered by the signal-driven I/O
mechanism;
–signal(SIGIO, signal_handler);
– Open Btn Device ;
– fd = open(dev_name ,O_RDWR);
– Set the owner of the file;
–fcntl(fd, F_SETOWN, getpid());
– Enable signal-driven I/O by turning on the FASYNC open file status flag
–fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) | FASYNC);
Button Interrupt
IOT網路連線
• 以雲端BaaS(Back end as a Service)作為資料儲存層
• 透過HTTP協定傳遞資料,呼叫儲存層REST API處理
• 以JSON格式封裝資料
• 封裝JSON/REST API, 簡化模組儲存及提取資料工序
• 藉由改變實作方式,可因應需求抽換不同儲存後端
功能簡介
• Data storage
• 30 request/sec, $100/10 requests
• 20G file storage, $0.03/GB extra
• 20G DB storage, $200/20GB extra
• 2TB data transfer,$0.10/GB extra
• Pushing service
• 1M unique recipients
• Social integration
• Twitter auth
• FaceBook auth
• Cloud Code
• node.js
• Web Hosting
BaaS(http://www.parse.com)
IOT網路連線
• 一種設計風格,非標準,相較於SOAP、XML-RPC簡潔
• 基於使用HTTP、URI、XML、HTML等廣泛使用協議或標準
• 資源由URI指定
• Ex. http://example.com/resources
• 對應HTTP協議的GET/POST/PUT/DELETE方法
• Ex. GET http://example.com/resource
• Ex. POST http://example.com/order
<purchase-order> <item> ... </item1> </purchase-order>
RESTful (Representational State Transfer)
IOT網路連線
• 以文字為基礎,輕量級的資料交換語言,有下列型式:
• Object :以{}包覆一系列無序key/value pair,內容以逗號「,」隔開
• Key/Value pair :以「:」隔開
• Array :以[]包覆一個或多個以,分割的值
• String :以””包覆的字符串
• Numeric :0~9的集合,可表示負數、指數或浮點數
• Boolean :True or False
JSON
IOT網路連線
JSON VS XML
IOT網路連線
JSON VS XML
IOT網路連線
未來應用
• 機房環控
• 恆溫、恆濕環境維持
• 照度調節
• 異常告警
• 虛實結合、降低耗能
• 智慧家庭
• 自動溫控
• 入侵告警
• 獨居老人
• 冷凍物流
• 運送路線、環境履歷
• 自動調溫
• 高溫提示
Q&A

Raspberry Pi 溫濕度發報機