More Related Content
Similar to IoT感測器驅動程式在樹莓派上實作 IoT Sensor Driver On The Raspberry Pi (20)
More from IttrainingIttraining (20)
IoT感測器驅動程式在樹莓派上實作 IoT Sensor Driver On The Raspberry Pi
- 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. 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
- 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
- 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