Slide 1

Slide 1 text

Raspberry Pi 好好玩 - 報到系統篇 台灣樹莓派 Aug 9, 2014 /MakerConf

Slide 2

Slide 2 text

姓名標示 — 非商業性 — 相同方式分享 CC (Creative Commons) 姓名標示 — 你必須給予 適當表彰、提供指向本授權 條款的連結,以及 指出(本作品的原始版本)是否已 被變更。你可以任何合理方式為前述表彰,但不得以 任何方式暗示授權人為你或你的使用方式背書。 非商業性 — 你不得將本素材進行商業目的之使 用。 相同方式分享 — 若你重混、轉換本素材,或依本 素材建立新素材,你必須依本素材的授權條款來 散布你的貢獻物。

Slide 3

Slide 3 text

3 ● Raspberry Pi 官方經銷商 ● 專注 Raspberry Pi 應用與推廣 , 舉辦社群活動 關於我們

Slide 4

Slide 4 text

4 ● COSCUP,MakerConf,PyCon,HKOSCon 講者 ● 投影片 ● https://speakerdeck.com/piepie_tw ● 程式碼 ● https://github.com/piepie-tw 分享 x 教學

Slide 5

Slide 5 text

本場次屬「教學與教育的應用」

Slide 6

Slide 6 text

Maker = 解決問題的人

Slide 7

Slide 7 text

2012 COSCUP 報到 http://www.plurk.com/p/h39baa

Slide 8

Slide 8 text

2013 COSCUP 報到 https://www.flickr.com/photos/coscup/9634483039/

Slide 9

Slide 9 text

2014 COSCUP 報到 http://www.ithome.com.tw/news/89509

Slide 10

Slide 10 text

● 2012 年以人工開 10 個櫃台報到 (1119 人 ) ● 2013 年以平板感應 NFC 的方式 ( 約 1500 人 ) ● 2014 年在報到入口加裝感應門 ( 約 1560 人 ) ● 1 分鐘可以有 41 人報到 ● 平均一人報到時間為 1.46 秒 ● 有 197 人通過閘門但卡片感應失敗 ● 2013/2014 的 NFC 由雪爾萊克 (Sharelike) 提供 近年來 COSCUP 報到方式 http://www.ithome.com.tw/news/89509

Slide 11

Slide 11 text

● 問題: ● 本次活動原來預估會有 300 人參加 ● 報到區需要 3 人以上

Slide 12

Slide 12 text

● 問題: ● 本次活動原來預估會有 300 人參加 ● 報到區需要 3 人以上 ● 可能的解決方法: ● 每個人上傳照片 , 會場以人臉識別報到 ● 寫手機 App, 讓所有人安裝 , 報到用手機感應 ● 寄發 NFC 識別證 , 報到時用識別證感應

Slide 13

Slide 13 text

● 問題: ● 本次活動原來預估會有 300 人參加 ● 報到區需要 3 人以上 ● 可能的解決方法: ● 每個人上傳照片 , 會場以人臉識別報到 ● 寫手機 App, 讓所有人安裝 , 報到用手機感應 ● 寄發 NFC 識別證 , 報到時用識別證感應 ● 考慮因素: ● 實做時間 , 價格 , 學習性

Slide 14

Slide 14 text

NFC 近場通訊

Slide 15

Slide 15 text

15 http://blogs.ifsworld.com/2013/06/come-on-apple-nfc-is-good-for-business/ NFC 線圈

Slide 16

Slide 16 text

16 http://us.moo.com/nfc/ http://blogs.ifsworld.com/2013/06/come-on-apple-nfc-is-good-for-business/ NFC 線圈 可做成貼紙

Slide 17

Slide 17 text

17 http://2d-code.co.uk/nfc-business-card/ http://us.moo.com/nfc/ http://blogs.ifsworld.com/2013/06/come-on-apple-nfc-is-good-for-business/ NFC 線圈 可做成貼紙 NFC 名片和手機互動的應用

Slide 18

Slide 18 text

常用的 NFC Reader + NFC Tag: PN532 + MiFare Classic Cards https://www.adafruit.com/products/364

Slide 19

Slide 19 text

NFC Data Exchange Format (NDEF) Beginning NFC - Near Field Communication with Arduino, Android, and PhoneGap

Slide 20

Slide 20 text

● 硬體 ● NFC Reader: PN532 ● NFC Tag: MiFare 感應白卡 ● 軟體 ● Libnfc, pynfc ● 邏輯 ● 事先儲存感應白卡的 UID ● 當 reader 讀到 tag 的 UID 時做比對 實做 NFC 感應所需要的準備

Slide 21

Slide 21 text

這樣就可以紀錄不同的識別證

Slide 22

Slide 22 text

為這次報到系統再加一些東西吧

Slide 23

Slide 23 text

● 能顯示報到者的資訊 ● 除了會場報到 , 工作坊報到也能使用 ● 可以列印抽獎聯或收據 ● 可雲端同步資料 ● 可擴充硬體 多加的功能與對應的硬體

Slide 24

Slide 24 text

● 能顯示報到者的資訊 ( 螢幕顯示 ) ● 除了會場報到 , 工作坊報到也能使用 ( 資料庫 ) ● 可以列印抽獎聯或收據 ( 熱感式印表機 ) ● 可雲端同步資料 ( 無線網卡 ) ● 可擴充硬體 ( 串接 ) 多加的功能與對應的硬體

Slide 25

Slide 25 text

熱感式印表機

Slide 26

Slide 26 text

熱感式紙張應用

Slide 27

Slide 27 text

熱感式紙張應用 熱感式印刷原理

Slide 28

Slide 28 text

熱感式紙張應用 熱感式印刷原理 常見熱感式印表機

Slide 29

Slide 29 text

熱感式紙張應用 熱感式印刷原理 常見熱感式印表機 手持式熱感式印表機

Slide 30

Slide 30 text

● 內建 BIG-5 中文字型 ● 支援 RS-232 或 TTL 通訊介面 ● 可印圖形 / 曲線 / 文字等 ● 印刷速度 : 6cm/s ● 解析度 : 8 點 /cm 本次選用的印表機特色與規格

Slide 31

Slide 31 text

和印表機溝通:從 Serial 送 Raw Byte

Slide 32

Slide 32 text

再來說說觸控螢幕吧

Slide 33

Slide 33 text

● 觸控螢幕 = 螢幕 + 觸控 ● 螢幕 = HDMI 或 RCA 或 RGB ● 觸控 = USB 或 SPI/I2C Raspberry Pi 的觸控螢幕選擇 chalk-elec HDMI + USB Gechic 1002 HDMI + USB Adafruit PiTFT RGB + SPI SainSmart 3.2” RGB + SPI

Slide 34

Slide 34 text

34 如何將畫面輸出到螢幕?

Slide 35

Slide 35 text

35 先從硬體架構講起

Slide 36

Slide 36 text

36 LCD 和 Framebuffer 的關係 http://www.clivemaxfield.com/diycalculator/popup-h-console.shtml 不同顏色深度顯示的結果 資料透過顯示卡輸出到螢幕的示意圖 從 Framebuffer 透過 DAC 轉換後輸出到螢幕

Slide 37

Slide 37 text

37 16-bit = 16 pin 現實是:沒有這麼多腳位可以用

Slide 38

Slide 38 text

38 4094 - 序列轉並列 http://www.channel9.msdn.com http://www.xuan.idv.tw/wordpress/?p=1181 4094 腳位說明 4094 時序圖 序列轉並列示意圖

Slide 39

Slide 39 text

39 ● 一個 4094 只能輸出 8bits ● 16bits 需串接兩個 4094 ● 再外接一顆 IC 做訊號同步處理 訊號同步 http://www.myu.ac.jp/~xkozima/lab/raspTutorial3.html

Slide 40

Slide 40 text

40 電路圖 http://www.myu.ac.jp/~xkozima/lab/raspTutorial3.html

Slide 41

Slide 41 text

41 ÷Pi – 轉換電路 - LCD http://www.myu.ac.jp/~xkozima/lab/raspTutorial3.html

Slide 42

Slide 42 text

42 以上是顯示部份電路圖 再加上觸控的電路圖吧

Slide 43

Slide 43 text

43 電路圖 http://ozzmaker.com/2013/05/23/raspberry-pi-with-a-3-2-tft-with-touch-control/

Slide 44

Slide 44 text

44 再講講軟體

Slide 45

Slide 45 text

45 http://blog.csdn.net/stefzeus/article/details/6258216 SPI / I2C / UART / PWM GPIO (General Purpose Input/Output)

Slide 46

Slide 46 text

● 決定是輸入還是輸出 ● 寫值到某根腳位 ● 從某根腳位讀值 ● 決定是正緣觸發還是負緣觸發 ● 等待中斷 (interrupt) 的發生 那軟體做什麼 ? 控制硬體

Slide 47

Slide 47 text

● 直接修改 register 的值 ● 步驟 1, 看 datasheet ● 步驟 2, 查 register ● 步驟 3, 填對應的值 ● 透過 driver 進行操作 控制硬體的方法

Slide 48

Slide 48 text

48 看 datasheet

Slide 49

Slide 49 text

BCM2835 ARM Peripherals http://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf 共 205 頁

Slide 50

Slide 50 text

50 查 register

Slide 51

Slide 51 text

● Page 5

Slide 52

Slide 52 text

存取 register= 在記憶體位置讀寫值

Slide 53

Slide 53 text

// RPI.h struct bcm2835_peripheral { unsigned long addr_p; // 指到實體記憶體位址 int mem_fd; // 開啟/dev/mem 的fd void *map; // memory map 的回傳 volatile unsigned int *addr; // 指到register 的位址 }; // RPI.c struct bcm2835_peripheral gpio = {GPIO_BASE}; 先定義週邊成一個 structure

Slide 54

Slide 54 text

1. 開啟記憶體裝置 2. 映射到實體記憶體空間 // RPI.c fd = open(“/dev/mem”, O_RDWR|O_SYNC); mmap(NULL, BLOCK_SIZE, PROT_READ, MAP_SHARED, mem_fd, addr_p);

Slide 55

Slide 55 text

在顯示器上畫畫面 = 寫 Framebuffer

Slide 56

Slide 56 text

void fb_init (int *fb_width, int *fb_height) ● { ● fb_fd = open(“/dev/fb0”, O_RDWR); ● fb_mem = (unsigned char *) ● mmap(NULL, fb_size, PROT_READ | PROT_WRITE, MAP_SHARED, fb_fd, 0); ● } ● ● unsigned char *fb_get () ● { ● return (unsigned char *) fb_mem; ● } 開啟 Framebuffer 裝置 http://www.myu.ac.jp/~xkozima/lab/raspTutorial3.html

Slide 57

Slide 57 text

void lcd_send (unsigned char *buffer) ● { ● lcd_comdat(0x4f, 0x00, 0x00); // 繪圖開始位置(x,y) = (0,0) ● lcd_comdat(0x4e, 0x00, 0xef); ● lcd_com(0x22); // 繪圖命令傳輸 ● spi_send_buffer(buffer); ● } ● ● void main () ● { ● lcd_init(IMAGE_SIZE); ● while (1)lcd_send(fb_get()); ● } 將 /dev/fb0 資料轉送到 GPIO http://www.myu.ac.jp/~xkozima/lab/raspTutorial3.html

Slide 58

Slide 58 text

58 第一版:沒有觸控功能的觸控螢幕

Slide 59

Slide 59 text

59 第二版:觸控功能接上去了

Slide 60

Slide 60 text

最後:整合硬體並實做報到功能

Slide 61

Slide 61 text

● Raspberry Pi Model B ● PN532 NFC Reader + NFC Tag ● 觸控螢幕 ● 熱感應印表機 ● 一堆線材和電容電阻 所需零件

Slide 62

Slide 62 text

指揮挺組合 +UI

Slide 63

Slide 63 text

DEMO 請到報到處看

Slide 64

Slide 64 text

結果還是有三個人在報到櫃台 - 因為要給發票和識別證吊牌 https://www.flickr.com/photos/sph999999/14718132127/in/set-72157646412879852

Slide 65

Slide 65 text

● 以觸控螢幕說明 Linux 顯示系統 ● 從查找 datasheet 學習軟硬整合能力 ● 透過不同的硬體介面控制週邊裝置 ● 以一個簡單的系統解決實際問題 ● 合作的重要性 ... 本次實做在教學上的應用

Slide 66

Slide 66 text

識別證加工過程 感謝辛苦的師大學弟們

Slide 67

Slide 67 text

Raspberry Pi Rocks the World Thanks