26 KiB
C, або I-squared-C, — це багатоконтролерний, багатопериферійний протокол, де будь-який підключений пристрій може виступати як контролер або периферія, спілкуючись через шину I²C (система передачі даних). Дані передаються у вигляді адресованих пакетів, кожен з яких містить адресу пристрою, для якого він призначений.
💁 Раніше ця модель називалася "master/slave", але ця термінологія поступово відходить через її асоціацію з рабством. Асоціація відкритого апаратного забезпечення прийняла терміни "controller/peripheral", хоча ви все ще можете зустріти стару термінологію.
Пристрої мають адресу, яка використовується при підключенні до шини I²C, і зазвичай вона жорстко закодована на пристрої. Наприклад, кожен тип датчика Grove від Seeed має однакову адресу: всі датчики освітлення мають одну адресу, всі кнопки мають іншу адресу, яка відрізняється від адреси датчика освітлення. Деякі пристрої мають можливість змінювати адресу, змінюючи налаштування перемичок або з'єднуючи контакти.
I²C має шину, що складається з двох основних проводів, а також двох проводів живлення:
Провід | Назва | Опис |
---|---|---|
SDA | Серійні дані | Цей провід використовується для передачі даних між пристроями. |
SCL | Серійний годинник | Цей провід передає сигнал годинника з частотою, встановленою контролером. |
VCC | Загальний колектор напруги | Джерело живлення для пристроїв. Він підключений до проводів SDA і SCL, забезпечуючи їх живлення через підтягувач резистора, який вимикає сигнал, коли жоден пристрій не є контролером. |
GND | Земля | Забезпечує загальну землю для електричного кола. |
Для передачі даних один пристрій видає умову старту, щоб показати, що він готовий до передачі даних. Після цього він стає контролером. Контролер надсилає адресу пристрою, з яким він хоче спілкуватися, а також вказує, чи хоче він читати чи записувати дані. Після передачі даних контролер видає умову зупинки, щоб показати, що він завершив. Після цього інший пристрій може стати контролером і передавати або отримувати дані.
2C має обмеження швидкості, з трьома різними режимами, які працюють на фіксованих швидкостях. Найшвидший — це режим High Speed із максимальною швидкістю 3.4 Мбіт/с (мегабіт на секунду), хоча дуже мало пристроїв підтримують таку швидкість. Наприклад, Raspberry Pi обмежений швидкістю fast mode на рівні 400 Кбіт/с (кілобіт на секунду). Стандартний режим працює на швидкості 100 Кбіт/с.
💁 Якщо ви використовуєте Raspberry Pi з Grove Base hat як апаратне забезпечення IoT, ви зможете побачити кілька роз'ємів I2C на платі, які можна використовувати для зв'язку з датчиками I2C. Аналогові датчики Grove також використовують I2C з АЦП для передачі аналогових значень у вигляді цифрових даних, тому датчик світла, який ви використовували, імітував аналоговий пін, передаючи значення через I2C, оскільки Raspberry Pi підтримує лише цифрові піни.
Універсальний асинхронний приймач-передавач (UART)
UART включає фізичну схему, яка дозволяє двом пристроям спілкуватися. Кожен пристрій має 2 контакти для зв'язку — передавання (Tx) і приймання (Rx), при цьому контакт Tx першого пристрою підключений до контакту Rx другого, а контакт Tx другого пристрою підключений до контакту Rx першого. Це дозволяє передавати дані в обох напрямках.
- Пристрій 1 передає дані зі свого контакту Tx, які приймаються пристроєм 2 на його контакті Rx.
- Пристрій 1 приймає дані на своєму контакті Rx, які передаються пристроєм 2 з його контакту Tx.
🎓 Дані передаються по одному біту за раз, і це називається послідовним зв'язком. Більшість операційних систем і мікроконтролерів мають послідовні порти, тобто з'єднання, які можуть передавати та приймати послідовні дані, доступні для вашого коду.
UART-пристрої мають швидкість передачі даних (також відому як швидкість символів), яка визначає швидкість передачі та приймання даних у бітах за секунду. Звичайна швидкість передачі даних — 9,600, тобто 9,600 бітів (0 і 1) даних передаються щосекунди.
UART використовує стартові та стопові біти — тобто він надсилає стартовий біт, щоб вказати, що збирається передати байт (8 бітів) даних, а потім стоповий біт після передачі 8 бітів.
Швидкість UART залежить від апаратного забезпечення, але навіть найшвидші реалізації не перевищують 6.5 Мбіт/с (мегабіт на секунду, або мільйони бітів, 0 або 1, переданих за секунду).
Ви можете використовувати UART через GPIO-контакти — ви можете налаштувати один контакт як Tx, а інший як Rx, а потім підключити їх до іншого пристрою.
💁 Якщо ви використовуєте Raspberry Pi з Grove Base hat як апаратне забезпечення IoT, ви зможете побачити роз'єм UART на платі, який можна використовувати для зв'язку з датчиками, що використовують протокол UART.
Послідовний периферійний інтерфейс (SPI)
SPI розроблений для зв'язку на коротких відстанях, наприклад, на мікроконтролері для роботи з пристроєм зберігання даних, таким як флеш-пам'ять. Він базується на моделі контролера/периферії з одним контролером (зазвичай процесором IoT-пристрою), який взаємодіє з кількома периферійними пристроями. Контролер керує всім, вибираючи периферійний пристрій і надсилаючи або запитуючи дані.
💁 Як і у випадку з I2C, терміни контролер і периферія є недавніми змінами, тому ви можете зустріти старіші терміни.
Контролери SPI використовують 3 дроти разом з 1 додатковим дротом на кожен периферійний пристрій. Периферійні пристрої використовують 4 дроти. Ці дроти:
Дріт | Назва | Опис |
---|---|---|
COPI | Вихід контролера, вхід периферії | Цей дріт використовується для передачі даних від контролера до периферії. |
CIPO | Вхід контролера, вихід периферії | Цей дріт використовується для передачі даних від периферії до контролера. |
SCLK | Послідовний годинник | Цей дріт передає сигнал годинника з частотою, встановленою контролером. |
CS | Вибір чипа | Контролер має кілька дротів, по одному на кожен периферійний пристрій, і кожен дріт підключений до дроту CS відповідного периферійного пристрою. |
Дріт CS використовується для активації одного периферійного пристрою за раз, забезпечуючи зв'язок через дроти COPI і CIPO. Коли контролеру потрібно змінити периферійний пристрій, він деактивує дріт CS, підключений до поточного активного периферійного пристрою, а потім активує дріт, підключений до периферійного пристрою, з яким він хоче спілкуватися далі.
SPI є повнодуплексним, тобто контролер може одночасно надсилати та отримувати дані від одного й того ж периферійного пристрою через дроти COPI і CIPO. SPI використовує сигнал годинника на дроті SCLK для синхронізації пристроїв, тому, на відміну від передачі безпосередньо через UART, йому не потрібні стартові та стопові біти.
Для SPI немає визначених обмежень швидкості, і реалізації часто можуть передавати кілька мегабайт даних за секунду.
Набори для розробки IoT часто підтримують SPI через деякі GPIO-контакти. Наприклад, на Raspberry Pi ви можете використовувати GPIO-контакти 19, 21, 23, 24 і 26 для SPI.
Бездротовий зв'язок
Деякі датчики можуть спілкуватися через стандартні бездротові протоколи, такі як Bluetooth (переважно Bluetooth Low Energy, або BLE), LoRaWAN (протокол низької потужності для Long Range мереж), або WiFi. Це дозволяє використовувати віддалені датчики, які не підключені фізично до IoT-пристрою.
Одним із прикладів є комерційні датчики вологості ґрунту. Вони вимірюють вологість ґрунту в полі, а потім передають дані через LoRaWAN на хаб-пристрій, який обробляє дані або надсилає їх через Інтернет. Це дозволяє датчику бути віддаленим від IoT-пристрою, який керує даними, зменшуючи споживання енергії та потребу у великих WiFi-мережах або довгих кабелях.
BLE популярний для передових датчиків, таких як фітнес-трекери, які працюють на зап'ясті. Вони поєднують кілька датчиків і передають дані з них на IoT-пристрій, наприклад, ваш телефон через BLE.
✅ Чи є у вас якісь Bluetooth-датчики на вас, у вашому домі чи школі? Це можуть бути датчики температури, датчики присутності, трекери пристроїв і фітнес-пристрої.
Одним із популярних способів підключення комерційних пристроїв є Zigbee. Zigbee використовує WiFi для створення сітчастих мереж між пристроями, де кожен пристрій підключається до якомога більшої кількості сусідніх пристроїв, утворюючи велику кількість з'єднань, схожих на павутину. Коли один пристрій хоче надіслати повідомлення в Інтернет, він може надіслати його найближчим пристроям, які потім передають його іншим сусіднім пристроям і так далі, поки воно не досягне координатора і не буде надіслано в Інтернет.
🐝 Назва Zigbee походить від танцю "виляючого хвоста" медоносних бджіл після їх повернення до вулика.
Вимірювання рівня вологості ґрунту
Ви можете виміряти рівень вологості ґрунту за допомогою датчика вологості ґрунту, IoT-пристрою та кімнатної рослини або найближчої ділянки ґрунту.
Завдання - вимірювання вологості ґрунту
Пройдіть відповідний посібник, щоб виміряти вологість ґрунту за допомогою вашого IoT-пристрою:
- Arduino - Wio Terminal
- Одноплатний комп'ютер - Raspberry Pi
- Одноплатний комп'ютер - Віртуальний пристрій
Калібрування датчиків
Датчики покладаються на вимірювання електричних властивостей, таких як опір або ємність.
🎓 Опір, вимірюваний в омах (Ω), показує, наскільки сильно щось протидіє проходженню електричного струму. Коли на матеріал подається напруга, кількість струму, що проходить через нього, залежить від опору матеріалу. Ви можете дізнатися більше на сторінці про електричний опір у Вікіпедії.
🎓 Ємність, вимірювана у фарадах (F), показує здатність компонента або схеми накопичувати та зберігати електричну енергію. Ви можете дізнатися більше про ємність на сторінці про ємність у Вікіпедії.
Ці вимірювання не завжди корисні — уявіть собі датчик температури, який дає вам вимірювання 22.5 кОм! Замість цього виміряне значення потрібно перетворити в корисну одиницю шляхом калібрування — тобто зіставлення виміряних значень із вимірюваною величиною, щоб дозволити нові вимірювання перетворювати в правильну одиницю.
Деякі датчики постачаються попередньо відкаліброваними. Наприклад, датчик температури, який ви використовували на попередньому уроці, вже був відкалібрований, щоб повертати вимірювання температури в °C. На заводі перший створений датчик піддавався впливу ряду відомих температур, і вимірювався опір. Це потім використовувалося для створення розрахунку, який може перетворювати значення, виміряне в Ω (одиниця опору), у °C.
💁 Формула для розрахунку опору за температурою називається рівнянням Штейнхарта–Гарта.
Калібрування датчика вологості ґрунту
Вологість ґрунту вимірюється за допомогою гравіметричного або об'ємного вмісту води.
- Гравіметричний — це вага води в одиниці ваги ґрунту, виміряна як кількість кілограмів води на кілограм сухого ґрунту.
- Об'ємний — це об'єм води в одиниці об'єму ґрунту, виміряний як кількість кубічних метрів води на кубічний метр сухого ґрунту.
🇺🇸 Для американців, через узгодженість одиниць, ці вимірювання можуть проводитися в фунтах замість кілограмів або в кубічних футах замість кубічних метрів.
Датчики вологості ґрунту вимірюють електричний опір або ємність — це залежить не тільки від вологості ґрунту, але й від типу ґрунту, оскільки компоненти в ґрунті можуть змінювати його електричні характеристики. Ідеально, щоб датчики були відкалібровані — тобто проводилися вимірювання датчиком і порівнювалися з вимірюваннями, отриманими більш науковим підходом. Наприклад, лабораторія може розрахувати гравіметричну вологість ґрунту, використовуючи зразки з конкретного поля, взяті кілька разів на рік, і ці числа використовуються для калібрування датчика, зіставляючи показання датчика з гравіметричною вологістю ґрунту.
Графік вище показує, як відкалібрувати датчик. Напруга фіксується для зразка ґрунту, який потім вимірюється в лабораторії шляхом порівняння вологої ваги з сухою вагою (вимірюючи вагу у вологому стані, потім висушуючи в печі та вимірюючи у сухому стані). Після того, як зроблено кілька вимірювань, їх можна нанести на графік і провести лінію через точки. Ця лінія потім може бути використана для перетворення показань датчика вологості ґрунту, отриманих IoT-пристроєм, у фактичні вимірювання вологості ґрунту.
💁 Для резистивних датчиків вологості ґрунту напруга збільшується зі збільшенням вологості ґрунту. Для ємнісних датчиків вологості ґрунту напруга зменшується зі збільшенням вологості ґрунту, тому графіки для них будуть нахилятися вниз, а не вгору.
Графік вище показує показання напруги з датчика вологості ґрунту, і, слідуючи цьому до лінії на графіку, можна розрахувати фактичну вологість ґрунту.
Цей підхід означає, що фермеру потрібно лише отримати кілька лабораторних вимірювань для поля, а потім він може використовувати IoT-пристрої для вимірювання вологості ґрунту — значно прискорюючи час для проведення вимірювань.
🚀 Виклик
Резистивні та ємнісні датчики вологості ґрунту мають низку відмінностей. У чому полягають ці відмінності, і який тип (якщо такий є) найкраще підходить для використання фермером? Чи змінюється відповідь залежно від того, чи йдеться про країни, що розвиваються, чи розвинені країни?
Післялекційна вікторина
Огляд і самостійне навчання
Дізнайтеся більше про апаратне забезпечення та протоколи, які використовуються датчиками та виконавчими механізмами:
- Сторінка GPIO у Вікіпедії
- Сторінка UART у Вікіпедії
- Сторінка SPI у Вікіпедії
- Сторінка I2C у Вікіпедії
- [Сторін
Відмова від відповідальності:
Цей документ був перекладений за допомогою сервісу автоматичного перекладу Co-op Translator. Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ на його рідній мові слід вважати авторитетним джерелом. Для критичної інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникають внаслідок використання цього перекладу.