Successfully reported this slideshow.
Your SlideShare is downloading. ×

IoT感測器驅動程式在樹莓派上實作 IoT Sensor Driver On The Raspberry Pi

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 16 Ad

IoT感測器驅動程式在樹莓派上實作 IoT Sensor Driver On The Raspberry Pi

專題成果發表暨企業徵才活動 http://bit.ly/2JL52hK
工程師就業養成班 http://bit.ly/2PQRnJT

在物聯網(IOT)的應用領域中,常需要用到多種感測器達成特定功能,每種感測器(Sensor)要能在微控制器(MCU)或微處理器(MPC)上正常運作,都需要由驅動程式(Driver)來驅動感測器。

此專題主要是在樹莓派(Raspberry Pi)上開發溫濕度感測器(DHT 22)、電子羅盤(GY-273)和超音波距離感測器(HC-SR04)的Linux驅動程式;首先必須先對感測器的硬體規格和通訊協定有所了解,包含感測器的工作電壓、最大工作電流、取樣頻率、溝通介面(GPIO、I2C)和資料數據格式;接著必須建立樹莓派Linux驅動程式的開發環境,並且在Linux Kernel規範的驅動程式架構下,用C語言編寫系統呼叫和中斷服務程序的進入點函式,同時需要了解在核心空間 (kernel space)編寫程式的相關知識;最後在Linux系統內建立各個感測器對應的裝置檔,並且由應用程式讀取感測裝置的數值。

專題成果發表暨企業徵才活動 http://bit.ly/2JL52hK
工程師就業養成班 http://bit.ly/2PQRnJT

在物聯網(IOT)的應用領域中,常需要用到多種感測器達成特定功能,每種感測器(Sensor)要能在微控制器(MCU)或微處理器(MPC)上正常運作,都需要由驅動程式(Driver)來驅動感測器。

此專題主要是在樹莓派(Raspberry Pi)上開發溫濕度感測器(DHT 22)、電子羅盤(GY-273)和超音波距離感測器(HC-SR04)的Linux驅動程式;首先必須先對感測器的硬體規格和通訊協定有所了解,包含感測器的工作電壓、最大工作電流、取樣頻率、溝通介面(GPIO、I2C)和資料數據格式;接著必須建立樹莓派Linux驅動程式的開發環境,並且在Linux Kernel規範的驅動程式架構下,用C語言編寫系統呼叫和中斷服務程序的進入點函式,同時需要了解在核心空間 (kernel space)編寫程式的相關知識;最後在Linux系統內建立各個感測器對應的裝置檔,並且由應用程式讀取感測裝置的數值。

Advertisement
Advertisement

More Related Content

Slideshows for you (20)

Similar to IoT感測器驅動程式在樹莓派上實作 IoT Sensor Driver On The Raspberry Pi (20)

Advertisement

More from IttrainingIttraining (20)

Recently uploaded (20)

Advertisement

IoT感測器驅動程式在樹莓派上實作 IoT Sensor Driver On The Raspberry Pi

  1. 1. IOT感測器驅動程式 在樹莓派上實作 翁O謙 丁O傑 王O斌 王O忠 吳O霖 張O晃 陳O陽
  2. 2. 專題動機 • 在物聯網的應用領域中,感知層是物聯網發展的基礎,依各種場景的需要會 使用到不同的感測器來收集資訊,但每種感測器要能在嵌入式系統上正常運 作,都需要由驅動程式來驅動,所以開發或移植驅動程式算是嵌入式系統必 備的技術,因此幾位對Linux驅動程式有興趣的同學決定一起開發感測器驅動 程式,並將此感測器拿來做物聯網的應用。
  3. 3. 系統架構圖 電子羅盤 距離感測器 Cloud Web Application 溫度:27 ℃ 濕度 : 59 % 距離:212 cm X:200 Y:191 Z:-351 GPIO GPIO I2C 溫溼度感測器
  4. 4. 感測器驅動程式的實現 1.溫濕度感測器(DHT22)驅動程式 2.距離感測器(HC-SR04)驅動程式 3.電子羅盤(GY-273)驅動程式 DHT22 Driver HCSR04 Driver GY273 Driver GPIO GPIO IIC DHT22 HCSR04 GY273 KernelChar /dev/dht22 /dev/hcsr04 /dev/gy237
  5. 5. Linux驅動程式運作流程 driver_init() cdev_init() gpio_i2c_setup() interrupt_setup() timer_setup() device_open() device_read() - Trigger_Sensor - Interrup_Irq - Data_Analysis device_close() File Operations driver_exit() cdev_exit() gpio_i2c_free() interrupt_free() timer_cancel() insmod Application rmmod User Space Kernel Space
  6. 6. Process_data() { for( n = 0; n < 40; n++) if(high_time[n] > 50us) data_bit[n] = 1; else data_bit[n] = 0; … dht22_irq_handler() { irq_counter++; now = get_time(); if(gpio == low) high_time[] = now – pre; if(irq_counter == last) WORK_QUEUE(process_data()); pre = now; } 2-1 Linux Driver for DHT22 dht22的通訊機制: DHT22 DHT22 signal > 1 ms dht22_trigger() { gpio_set_direction(pin, out); gpio_set_value(pin, low); udelay(1000); gpio_set_value(pin, high); udelay(20); gpio_set_direction(pin, in); } Interrup_setup() { reuest_irq(pin, dht22_irq_handler, FALLING_And_RISING) } Hi_H Lo_H Hi_T Lo_T Checksum Work_Queue Humidity = Hi_H x 256 + Lo_H Temperature = Hi_T x 256 + Lo_T Checksum = Hi_H + Lo_H + Hi_T + Lo_T Trigger 40-Bit DataResponse 1. interrup_setup 2. trigger 3. interrup_irq 4. process_data
  7. 7. 2-1 Linux Driver for DHT22 Ready for Trigger Working Rest 2 sec Dht22 State dht22_read() trigger_sensor() Application 1 dht22_read() trigger_sensor() Application 2 ? ?issue dht22_read() get_temp() Application 1 dht22_read() get_temp() Application 2 timer_update(2 sec) trigger_sensor() update_temp() Temp. Value Revised ProcessInitial Process
  8. 8. 2-1 Linux Driver for DHT22 /dev 存取介面 /sys 存取介面 邏輯分析儀驗證波形
  9. 9. 2-2 Linux Driver for HC-SR04 hc-sr04的通訊機制: hcsr04_trigger() { gpio_set_direction(pin, out); gpio_set_value(pin, high); udelay(10); gpio_set_value(pin, low); } hcsr04_measure() { interrup_setup; hcsr04_trigger(); wait_event(); elapsed = endT – start; } hcsro4_irq_handler() { if(gpio == high) startT = get_time(); else { endT =get_time(); send_event(); } } Interrup_setup() { reuest_irq(pin, hcsro4_irq_handler, FALLING_And_RISING) } Elapsed = (end_time – start_time) us Sound_Speed = 340 x 10-6 m/us Distance = Elapsed / 2 x Sound_Speed Elapsed 1. interrup_setup 2. trigger 3. interrup_irq 4. process_data
  10. 10. 2-2 Linux Driver for HC-SR04 /sys 存取介面 邏輯分析儀驗證波形
  11. 11. 2-3 Linux Driver for GY-273 /dev/gy273 applicaiton I2C-dev gy273.dtbo gy273@50{ compatible = “gy273“ reg = <0x1E>; }; Device Tree Overlay gy273.ko I2C Client Driver (I2C-dev) .driver = { .name = “gy273” } .probe = gy273_probe, .remove = gy273_remove, gy273_probe = { register_chardev(); cdev_init(); cdev_add(); } 當 device的compatible 等於driver的.name時 gy273_probe才會建立 字元裝置 1. add_device_node 2. add_i2c_dirve 3. probe /dev/gy273
  12. 12. 2-3 Linux Driver for GY-273 /dev 存取介面 測試程式讀取 /dev/gy273
  13. 13. IoT應用實例 #1 DHT22 風扇 溫溼度感測器應用 OLED
  14. 14. IoT應用實例 #2 距離感測器 電子羅盤感測器 HC-SR04 GY-273 PIR
  15. 15. IOT Platform ThingsBoard
  16. 16. Web呈現感測數值

×