Вы просматриваете архивную страницу сайта. Информация на этой странице может быть устаревшей.
# Кейс 2 - Продолжение (Датчики)
## 2.2. Лабораторная работа: знакомимся с сенсорами
Это переработанная версия описания практикума 2.1, приведенного на сайте [myitacademy.ru/edu](https://myitacademy.ru/edu/mod/book/view.php?id=526).
В этом несложном практикуме мы попробуем поработать с устройствами, которые соединяются по цифровому протоколу I2C.
К каждому из этих сенсоров есть готовая библиотека, упрощающая работу.
Мы будем измерять следующие показатели:
1. Температура, влажность, давление.
2. Освещенность.
3. Положение в пространстве.
Поскольку протокол везде используется один и тот же, то и действия мы будем проделывать аналогичные.
Небольшое различие будет лишь в используемых библиотеках. По итогам, вы сможете подключить и получить данные с каждого из указанных сенсоров.
Конкретная модель сенсора не имеет большого значения в данном практикуме.
Мы будем использовать модули датчиков от Unwired Devices. Кроме того, наш вариант не будет уступать предлагаемому в орингинале варианту подключения
датчиков от Амперки через Slot Shield, так как Unwired Devices Kit изначально создавался так, чтобы было минимумов проводов.
### Метеодатчик
Для этого задания нам понадобятся:
- радиомодуль UNWR с платой-адаптером UMDK-RF
![ud-min3](/assets/images/iot-academy/ud-min3.png)
- модуль метеодатчика на основе BME280 (плата UMDK-THP)
![umdk-thp](/assets/images/iot-academy/umdk-thp.png)
- Библиотека [BME280](https://os.mbed.com/users/MACRUM/code/BME280/).
Собираем модули в единую конструкцию
![unwr_meteo_ok](/assets/images/iot-academy/unwr_meteo_ok.png)
Создаем проект в MbedStudio и импортируем [библиотеку](https://os.mbed.com/users/MACRUM/code/BME280/) в проект.
Пишем программу:
```cpp
#include "mbed.h"
#include "BME280.h"
DigitalOut led(LED1);
BME280 sensor_bme(I2C_SDA, I2C_SCL);
int main()
{
printf("Hello, bme280!\n\r");
while(1) {
wait(1); // 1 second
led = !led; // Toggle LED
printf("%2.2f degC, %04.2f hPa, %2.2f %%\r\n", sensor_bme.getTemperature(), sensor_bme.getPressure(), sensor_bme.getHumidity());
}
}
```
Компилируем, прошиваем, подключаемся к плате по последовательному порту, и наблюдаем
![term-meteo](/assets/images/iot-academy/term-meteo.png)
Попробуйте нагреть датчик руками или дыханием и посмотреть, что изменится.
Обратите внимание, BME280 - это датчик температуры, давления и влажности **воздуха**! Погружать датчик в какую-либо жидкость категорически **запрещается!**
### Датчик освещенности
Нам понадобятся:
- радиомодуль UNWR с платой-адаптером UMDK-RF
![ud-min3](/assets/images/iot-academy/ud-min3.png)
- модуль датчика освещенности на основе OPT3001 (плата UMDK-LIT)
![umdk-lit](/assets/images/iot-academy/umdk-lit.png)
- Библиотека [OPT3001](https://github.com/olegart/mbed_opt3001).
Демонстрационная программа:
```cpp
#include "mbed.h"
#include "OPT3001.h"
DigitalOut led(LED1);
OPT3001 sensor_opt(I2C_SDA, I2C_SCL);
int main()
{
printf("Hello, opt3001!\n\r");
while(1) {
wait(1); // 1 second
led = !led; // Toggle LED
printf("%ld lux\r\n", sensor_opt.readSensor());
}
}
```
Результат работы:
![term-light](/assets/images/iot-academy/term-light.png)
### Акселерометр
Нам понадобятся:
- радиомодуль UNWR с платой-адаптером UMDK-RF
![ud-min3](/assets/images/iot-academy/ud-min3.png)
- модуль акселерометра на основе LSM6DS3 (плата UMDK-ACC)
![umdk-acc](/assets/images/iot-academy/umdk-acc.png)
- Библиотека [LSM6DS3](https://os.mbed.com/users/einsteingustavo/code/LSM6DS3).
Демонстрационная программа:
```cpp
#include "mbed.h"
#include "LSM6DS3.h"
LSM6DS3 accel(I2C_SDA, I2C_SCL, LSM6DS3_AG_I2C_ADDR(0));
int main()
{
// Initialize the gyro and accelerometer
uint16_t status = accel.begin();
printf("LSM6DS3 WHO_AM_I's returned: 0x%X\r\n", status);
while (1) {
accel.readAccel();
printf("%7.3f, %7.3f, %7.3f \n\r", accel.ax, accel.ay, accel.az);
wait_ms(500);
}
}
```
Результат работы:
![term-acc](/assets/images/iot-academy/term-acc.png)
Обратите внимание на то, как задается адрес датчика на шине I2C в этом случае!
### Задача
Напишите программу, которая комбинирует показания со всех трех датчиков на шине I2C, то есть для такого случая:
![umdk-i2c_x3](/assets/images/iot-academy/umdk-i2c_x3.png)
Порядок размещения модулей может быть любой, главное соблюдать расположение ключа при установке!
[**^ К оглавлению**](iot/samsung/archive/2020)