з номіналами від 10 Ом до 1 МОм);

  • 2 резистори по 4,7 кОм (з того ж набору);
  • сполучні дроти (наприклад, ось хороший набір);
  • комп'ютера з Arduino IDE.
  • 1 Описінтерфейсу I2C

    Послідовний протокол обміну даними IIC (також званий I2C - Inter-Integrated Circuits, міжмікросхемне з'єднання) використовує для передачі даних дві двонаправлені лінії зв'язку, які називаються шина послідовних даних SDA (Serial Data)та шина тактування SCL (Serial Clock). Також є дві лінії для живлення. Шини SDA та SCL підтягуються до шини живлення через резистори.

    У мережі є хоча б одне провідний пристрій (Master)що ініціалізує передачу даних і генерує сигнали синхронізації. У мережі також є ведені пристрої (Slave), які передають дані на запит ведучого. Кожен ведений пристрій має унікальну адресу, за якою ведучий і звертається до нього. Адреса пристрою вказується у паспорті (datasheet). До однієї шині I2C може бути підключено до 127 пристроїв, зокрема кілька провідних. До шини можна підключати у процесі роботи, тобто. вона підтримує гаряче підключення.

    Давайте розглянемо тимчасову діаграму обміну протоколу I2C. Є кілька варіантів, розглянемо одне із поширених. Скористайтеся логічним аналізатором, підключеним до шин SCL та SDA.

    Майстер ініціює обмін. Для цього він починає генерувати тактові імпульси та посилає їх по лінії SCL пачкою з 9 штук. Одночасно на лінії даних SDA він виставляє адреса пристрою, з яким необхідно встановити зв'язок, які тактуються першими 7 тактовими імпульсами (звідси обмеження на діапазон адрес: 2 7 = 128 мінус нульова адреса). Наступний біт посилки - це код операції(читання або запис) та ще один біт - біт підтвердження(ACK), що ведений пристрій прийняв запит. Якщо біт підтвердження не прийшов, обмін закінчується. Або майстер продовжує надсилати повторні запити.

    Це проілюстровано на малюнку нижче.. У першому випадку, наприклад, відключимо ведений пристрій від шини. Видно, що майстер намагається встановити зв'язок із пристроєм з адресою 0x27, але не отримує підтвердження (NAK). Обмін закінчується.


    Тепер підключимо до шини I2C ведений пристрій та повторимо операцію. Ситуація змінилась. На перший пакет з адресою надійшло підтвердження (ACK) від веденого. Обмін продовжився. Інформація передається також 9-бітовими посилками, але тепер 8 бітів займають даніта 1 біт - біт підтвердженняотримання веденим кожного байта даних. Якщо якийсь момент зв'язок обірветься і біт підтвердження не прийде, майстер припинить передачу.

    2 Реалізація I2Cв Arduino

    Arduino використовує для роботи з інтерфейсом I2C два порти. Наприклад, Arduino UNO і Arduino Nano аналоговий порт A4 відповідає SDA, аналоговий порт A5 відповідає SCL.


    Для інших моделей плат відповідність висновків така:

    3 Бібліотека "Wire"для роботи з IIC

    Для полегшення обміну даними з пристроями по шині I2C для Arduino написано стандартну бібліотеку Wire. Вона має такі функції:

    ФункціяПризначення
    begin(address) ініціалізація бібліотеки та підключення до шини I2C; якщо не вказана адреса, то приєднаний пристрій вважається провідним; використовується 7-бітна адресація;
    requestFrom() використовується провідним пристроєм для запиту певної кількості байтів від веденого;
    beginTransmission(address) початок передачі даних до веденого пристрою за певною адресою;
    endTransmission() припинення передачі даних веденому;
    write() запис даних від веденого у відповідь на запит;
    available() повертає кількість байт інформації, доступних прийому від веденого;
    read() читання байта, переданого від веденого ведучому або від ведучого веденому;
    onReceive() вказує на функцію, яка має бути викликана, коли ведений пристрій отримає передачу від ведучого;
    onRequest() вказує на функцію, що має бути викликана, коли провідний пристрій отримає передачу від веденого.

    4 Підключення I2C пристроюдо Arduino

    Давайте подивимося, як працювати з шиною I2C за допомогою Arduino.

    Спочатку зберемо схему, як у малюнку. Керуватимемо яскравістю світлодіода, використовуючи цифровий 64-позиційний потенціометр AD5171 (див. технічний опис), який підключається до шини I2C. Адреса, за якою ми будемо звертатися до потенціометра – 0x2c (44 у десятковій системі).


    5 Управління пристроємпо шині IIC

    Розглянемо діаграми інформаційного обміну з цифровим потенціометром AD5171, представлені в технічному описі:


    Нас тут цікавить діаграма запису даних у регістр RDAC. Цей регістр використовується для керування опором потенціометра.

    Відкриємо з прикладів бібліотеки "Wire" скетч: Файл Зразки Wire digital_potentiometer. Завантажимо його на згадку Arduino.

    #include // Підключаємо бібліотеку "Wire" byte val = 0; // значення передачі потенциометру void setup() ( Wire.begin(); // підключаємося до шини I2C як майстер } void loop() ( Wire.beginTransmission(44); // починаємо обмін із пристроєм з I2C адресою "44" (0x2C) Wire.write(byte(0x00)); // посилаємо інструкцію запису регістр RDAC Wire.write(val); // задаємо положення 64-позиційного потенціометра Wire.endTransmission(); // завершуємо I2C передачу val++; // инкрементируем val на 1 if (val == 63) ( // після досягнення максимуму потенціометра val = 0; // скидаємо val ) delay(500); }

    Після включення ви бачите, як яскравість світлодіода циклічно наростає, а потім згасає. При цьому керуємо потенціометром за допомогою Arduino по шині I2C.

    Прийшла мені посилка з Китаю, в якій лежить мікросхема EEPROM фірми Atmel. Яку хочеться підключити до Arduino. Але зовсім не хочеться використати готову бібліотеку, а розібратися самому. За цим стаття вийти трохи об'ємною і нудною і розділимо її на три частини:

    • Теорія інтерфейсу I2C.
    • EEPROM, описи моєї мікросхеми (AT24C256) та підключення.
    • Написання бібліотеки до роботи з пам'яттю.

    Частина перша, I2C та бібліотека «Wire».

    Послідовний протокол обміну даними IIC(також званий I2C- Inter-Integrated Circuits, міжмікросхемне з'єднання). Розроблена фірмою Philips Semiconductors на початку 1980-х як проста 8-бітна шина внутрішнього зв'язку для створення електроніки, що управляє. Так як право на використання його коштує грошей фарма Atmel назвала його TWI, Але сенс від цього змінюється.

    Як це працює?

    Для передачі використовуються дві двонаправлені лінії передачі. SDA(Serial Data) шина послідовних даних та SCL(Serial Clock) Шина тактування. Обидві шини підтягнуті резисторами до плюсової шини живлення. Передача/Прийом сигналів здійснюється притисканням лінії 0, одиничку встановлюється сама, за рахунок підтягуючих резисторів.

    У мережі є хоча б один провідний пристрій ( Master), яке ініціалізує передачу даних та генерує сигнали синхронізації та ведені пристрої ( Slave), які передають дані на запит ведучого. Кожен ведений пристрій має унікальну адресу, за якою ведучий і звертається до нього. Звичайно зрозуміло, що Ведучий це наш мікроконтролер, а ведений наша пам'ять. Провідний пристрій починає притискати шину SCLдо нуля з певною чистотою, а шину SDAпритискати або відпускати на певну кількість тактів передаючи Одиночку або Нулик. Передача даних починається з сигналу START потім передається 8 біт даних і 9-м бітом Ведомий пристрій підтверджує прийом байт притискаючи шину SDAдо мінуса . Закінчується передача сигналом STOP .

    Бібліотека "Wire".

    Для полегшення обміну даними з пристроями по шині I2C для Arduino написано стандартну бібліотеку Wireяка є вже у комплекті IDE. Вона має такі основні функції:

    Wire.begin(Address)викликається один раз для ініціалізації та підключення до шини як Ведучий або Ведений пристрій. Якщо Address не заданий підключаємося як Майстер-пристрій.

    Wire.beginTransmission(address) починає передачу на ведений I2C пристрій із заданою адресою.

    Wire.endTransmission() припиняє передачу даних веденому. Функція повертає значення типу byte:

    • 0 - успіх.
    • 1 дані занадто довгі для заповнення буфера передачі.
    • 2 — прийнято NACK під час передачі адреси.
    • 3 - прийнятий NACK під час передачі даних.
    • 4 - інші помилки.

    Wire.write()запис даних від веденого пристрою у відповідь на запит від провідного пристрою, або ставить в чергу байти для передачі від майстра до веденого пристрою. Фактично записує дані в буфер. Розмір буфера 32 байта (мінус 2 байти адресу, фактично 30 байт), а передає буфер функція Wire.endTransmission().

    • Wire.write(value)- value: значення передачі, один байт.
    • Wire.write(string)- string: рядок передачі, послідовність байтів.
    • Wire.write(data, length)- Data: масив даних для передачі, байти. length: кількість байтів для передачі.

    Wire.read()Зчитує байт, який був переданий від веденого пристрою до ведучого або який був переданий від провідного пристрою до провідного. Значення, що повертається byte : черговий прийнятий байт.

    Це основні функції бібліотеці, інші ми розглянемо по ходу п'єси))

    Частина друга, EEPROM.

    EEPROM (англ. Electrically Erasable Programmable Read-Only Memory) - електрично стирається ПЗП (ЕСППЗУ), що перепрограмується, один з видів енергонезалежної пам'яті (таких, як PROM і EPROM). Пам'ять такого типу може стиратися та заповнюватися даними до мільйона разів.

    Мені надіслали вже готовий модуль EEPROM із мікросхемою AT24C256 фірми Atmel об'ємом 32 кбайт. Щоб розібратися з цим дивом нам доведеться проштудувати datasheetякий дуже нудний і англійською. Тож я вам видам уже готовий результат моїх мук.

    Характеристики:

    • Низьковольтні та стандартні живлення. VCC = 1.7V до 5.5V.
    • 400kHz (1.7V) and 1MHz (2.5V, 2.7V, 5.0V) сумісний із частотою синхронізації.
    • Витривалість: 1,000,000 Циклів Записи.
    • Внутрішньо організований як 32768 сторінок x 8 біт.

    висновки:

    • WP- Захист від запису. Якщо висновок підключений до GND можна записувати дані на згадку.
    • A0…A2- Виводи задають адресу пристрою.
    • Vcc- Харчування плюс.
    • GND- Харчування мінус.
    Адреса пам'яті:

    Задається трьома ногами A0..A2. Якщо нога притиснута до Gnd, то значення біта 0, якщо до Vcc то 1. Мікросхема використовує восьми бітна адреса, останній біт відповідає за вибір операції. Якщо значення біта високий, то ініціалізується операція читання, якщо низький (нуль) то операція запису.

    Тобто якщо всі три висновки притиснуті до GND і ми хочемо записати в пам'ять, адреса пристрою буде виглядати як 10100000 (у бібліотеці «Wire» використовується 7-бітна адреса, зрушуємо все в право на один біт 01010000 0x50).

    Запис даних на згадку:

    Для запису ми спочатку звертаємося до пам'яті з бітом Записи на адресу. Потім надсилаємо дві 8-ми бітних адреси (тобто у нас 0x8000 адрес), потім байт даних і сигнал STOP. Після цього EEPROM входить до внутрішньо синхронізованого циклу запису tWR(Write Cycle Time 5 ms) в енергонезалежну пам'ять. Усі вхідні сигнали
    відключено під час цього циклу запису, та EEPROM не відповість, поки запис не буде завершено.

    Копаємося далі і знаходимо в dataheet що пам'ять мікросхеми організована як 512 сторінок по 64 байта. Тобто ми можемо записати відразу до 64 байт інформації за одну команду. Для цього ми передаємо всі 64 байти інформації і тільки після цього надсилаємо сигнал STOP.

    Читання даних:

    З читанням даних дедалі цікавіше. Пам'ять підтримує три варіанти читання:

    • Читати поточну адресу;
    • Читати випадкову адресу;
    • Послідовне читання;

    Пам'ять запам'ятовує останню адресу запису доки не вимкнено живлення, тому ми можемо прочитати останній байт без вказівки адреси.

    Щоб прочитати випадкову адресу нам потрібно з початку відправити команду на записі передати адресу, яку хочемо прочитати( не забувайте, що адреса складається з двох 8-ми бітних частин). Потім надіслати команду на читання і отримати шуканий байт, завершивши все командою STOP.

    Послідовне читання може виконуватися як з поточної адреси так і з випадкової і буде продовжуватися доки мікроконтролер не надішле сигнал СТОП. При переповненні адреси пам'ять скинути її і адресація почнеться з початку.

    Ну що ж настав час спробувати щось записати:
    #include // Підключаємо бібліотеку #define EEPROM_ADDRESS 0x53 // Задаємо адресу пам'яті word address = 0; // Адреса куди записуватимемо byte data_send = 170; // Дані void setup() ( Wire.begin(); // Ініціалізуємо I2C Serial.begin(9600); Serial.print("Write byte to EEPROM memory..."); Serial.println (data_send); Wire. beginTransmission(EEPROM_ADDRESS);// Починаємо передачу Wire.write(address >> 8);Wire.write(address & 0xFF);// Відправляємо два байти адреси Wire.write(data_send); endTransmission(); // Закінчуємо передачу і перевіряємо статус передачі.if (status == 0)Serial.println ("Ок"); // delay(10); ), Wire.beginTransmission(EEPROM_ADDRESS);// Щоб прочитати дані отруюємо спочатку адресу де вони лежать. (status == 0)Serial.println ("Ок"); // stop transmitting Wire.requestFrom(EEPROM_ADDRESS, (byte)1); // відправляємо команду на читання одного байта даних byte data = 0; if (Wire.available ()) // перевіряємо, що є дані для читання (data = Wire.read(); //читаємо дані) Serial.println (data, DEC); ) void loop() ( )

    Wire.requestFrom(address, quantity) — Використовується майстром для запиту байтів від керованого пристрою. Ці байти може бути отримано з допомогою методів available() і read() . Розмір буфера такий самий 32 байти.

    • address : 7-бітна адреса пристрою, у якого запитуються байти;
    • quantity : кількість байтів, що запитуються;

    Wire.available()— Повертає кількість байтів, доступних для отримання за допомогою read().

    Ну і приклад із записом у пам'ять рядка «Hello Word»:

    #include #define EEPROM_ADDRESS 0x53 word address = 0; char data_send = "Hello Word"; void setup() ( Wire.begin(); // Serial.begin(9600); Serial.print("Write byte to EEPROM memory..."); Serial.println (data_send); Wire.beginTransmission(EEPROM_ADDRESS); Wire.write(address >> 8); Wire.write(address & 0xFF); Wire.write(data_send); delay(10); Serial.println("Read byte from EEPROM memory..."); Wire.endTransmission(); if (status == 0)Serial.println ("Ок"); // stop transmitting Wire.requestFrom(EEPROM_ADDRESS, (byte)10); byte data = 0; i<10 ;i++) { if (Wire.available()) { data = Wire.read(); } Serial.write (data); } } void loop() { }

    Організація пам'яті:

    Так як в данихдописах про це написано неясно. Я на практиці намагався розібратися із цим. У datasheet написано що пам'ять мікросхеми організована як 512 сторінок по 64 байта. Що це означає? Якщо ми захочемо записати більше 64 байт відразу, скажімо за адресою 0x40 (адреса початок другої сторінки), при виході адреси за межі сторінки внутрішній лічильник мікросхеми скине адресу на початок сторінки. А зайві байти будуть записані на початок сторінки і зітруть дані, які були там записані.

    Для читання таких обмежень немає, в даташіпі написано тільки те, що коли ви досягнете кінця адрес вас автоматично перекине на початок (адреса 0х00).

    На цьому я думаю все. Ви, звичайно, можете завантажити вже готову бібліотеку для EEPROM, думаєте зможете і написати свою. Головне ми розібралися в основному принципі роботи.

    У цій статті ми спробували зібрати в одному місці посилання на всі найпопулярніші бібліотеки Ардуїно, а також підготували добірку найпопулярніших бібліотек. Рано чи пізно будь-який ардуїнщик стикається з необхідністю використання тієї чи іншої бібліотеки. Адже використання готового коду дуже скорочує час на програмування. Сподіваємося, що зібрані в одному місці та забезпечені посиланнями для скачування та короткими прикладами використання, відомості про популярні бібліотеки допоможуть вам у ваших проектах.

    Бібліотека ардуїно – це програмний код, що зберігається не в скетчі, а у зовнішніх файлах, які можна підключити до вашого проекту. У бібліотеці зберігаються різні методи та структури даних, які необхідні для спрощення роботи з датчиками, індикаторами, модулями та іншими компонентами. Використання готових програм суттєво спрощує роботу над проектами, тому що можна зосередитися на основній логіці, не витрачаючи час на безліч дрібниць.

    Сьогодні створено величезну кількість бібліотек, які можна легко знайти та завантажити в інтернеті. Переважна більшість бібліотек розповсюджуються за вільною ліцензією, тому потреби у пошуку “піратських” версій немає. Головне, це навчитися.

    Стандартні бібліотеки Ардуїно

    Почати знайомство з бібліотеками краще з офіційного сайту, на якому можна знайти значний список стандартних модулів та посилання на офіційні бібліотеки партнерів.

    Список вбудованих бібліотек (вони поставляються разом із дистрибутивом Arduino IDE):

    • EEPROM
    • Ethernet / Ethernet 2
    • Firmata
    • LiquidCrystal
    • Servo
    • SoftwareSerial
    • Stepper

    Добірка бібліотек в одному архіві

    Якщо у вас немає часу на детальний аналіз безлічі сайтів і ви хочете завантажити все необхідне для роботи із зовнішніми пристроями Ардуїно в одному архіві, ми підготували список 40 найпопулярніших бібліотек. Просто та розпакуйте його вміст (папку libraries) у папку Arduino.

    Бібліотеки для екранів, індикаторів та дисплеїв

    Бібліотека I2C

    Бібліотека призначена для роботи периферійного пристрою за протоколом I2C.

    Приклад використання:

    #ifndef I2C_MASTER_H

    #define I2C_MASTER_H

    void I2C_init (void) – створення об'єкта, налаштування на правильну частоту для шини.

    uint8_t I2C_start () – встановлення з'єднання з новим пристроєм.

    uint8_t I2C_write() – запис даних на поточний пристрій.

    uint8_t I2C_read_ack() – зчитування байта з пристрою, запит наступного байта.

    Бібліотека LiquidCrystal

    Стандартна бібліотека, встановлена ​​в Arduino IDE. Призначена для керування рідкокристалічними дисплеями LCD.

    Приклад використання:

    #include . Також, щоб не помилитися під час написання, можна підключити через меню Sketch – Import Library – LiquidCrystal.

    Конструктор класу – LiquidCristal(…). Аргументами є rs, rw, en, do ... d7. Перші 3 відповідаю висновкам сигналів RS, RW та Enable. Висновки d відповідають номерам шин даних, до яких підключено дисплей.

    void begin(cols, rows) – метод, який ініціалізує інтерфейс дисплея. Аргументами є кількість знаків у рядку (cols) та кількість рядків (rows). Цей метод має задаватися першим.

    void createChar(num, data) - метод, необхідний для створення символів користувача.

    Бібліотека UTFT

    Стандартна бібліотека, необхідна для роботи Ардуїно з екранами TFT різних типів. Всі дисплеї, що підтримуються, представлені в супровідному документі з бібліотекою.

    Приклад використання:

    #include

    UTFT(); - Створення екземпляра UTFT.

    textRus(char*st, int x, int y); – метод, що дозволяє виводити рядок із покажчика. Наприклад, char * dht = "Температура, С";

    textRus(string st, int x, int y); - Виведення рядка із зазначенням у параметрі. Наприклад, g.textRus("Температура, С", 0, 20);

    Бібліотека LedControl

    Дозволяє керувати семисегментними дисплеями, об'єднувати масив із світлодіодів в одну матрицю.

    Приклад використання:

    #include

    LedControl lc1 = LedControl();

    - Потрібен для ініціалізації бібліотеки. Повинна складатися з чотирьох аргументів – номери пінів, до яких підключено дисплей (перші 3 аргументи) та кількість підключених чіпів.

    writeArduinoOn7Segment() – відображення на дисплеї всіх чисел від 0 до 15. Використовує функції setChar() для символів a та d та setRow() для створення макета пропущених символів.

    LedControl.shutdown() – вимкнення зображення.

    setIntensity() – контроль яскравості.

    Бібліотеки для роботи з датою та часом ардуїно

    Бібліотека RTClib

    Бібліотека для роботи з годинником реального часу, що спрощує взаємодію з Ардуїно.

    Приклад використання:

    #include

    RTC_DS1307 RTC; - Вибір датчика (в даному випадку DS1307).

    rtc.adjust(DateTime(Date, Time)); – налаштування часу та календаря.

    dayOfTheWeek () – виведення дня тижня. Аргумент від 0 до 6, 0 – неділя.

    Бібліотека Timelib

    Дозволяє Ардуїно отримувати інформацію про дату та час на даний момент.

    Приклад використання:

    #include

    Time(); - Створення екземпляра.

    setTime(t); - Встановлення часу. Аргумент t – година, хвилина, секунда, день, місяць та рік.

    timeStatus(); - Вказує, чи встановлено час.

    adjustTime(adjustment); - Налаштування часу.

    Бібліотека Ds1307

    Бібліотека для зручної взаємодії годинника DS1307 з Ардуїно з використанням бібліотеки Wire.

    Приклад використання:

    #include

    class DS1307RTC – створення об'єкта DS1307.

    SetTime() – встановлення часу.

    get() – зчитує RTC, повертає отриману дату у форматі POSIX.

    Set(time_t t) – запис дати у RTC

    Бібліотека DS 3231

    Призначена для керування датою та часом у модулі ds3231.

    #include “ds3231.h”

    DS3231 Clock(SDA, SCL); – створення об'єкта DS3231, підключення до лінії тактування та лінії даних.

    getTime(); – зчитування дати та часу з годинника.

    setDate(date, mon, year); - Встановлення дати.

    Системні бібліотеки Ардуїно

    Бібліотека EEPROM

    Стандартні бібліотеки. Призначений для роботи з енергонезалежною пам'яттю (запис даних, їх читання).

    Приклад використання:

    #include

    EEPROM.read(); - Створення об'єкта, зчитування байта за адресою з енергонезалежної пам'яті.

    EEPROM.write(address, value) – запис байта в енергонезалежну пам'ять.

    EEPROM.put() – запис рядків чисел із плаваючою комою.

    EEPROM.get() – читання рядків та чисел з плаваючою комою.

    Бібліотека SoftwareSerial

    Бібліотека, яка дозволяє реалізовувати послідовні інтерфейси з будь-яких цифрових пінів. Також дозволяє створювати кілька послідовних портів, які працюють на швидкості до 115 200 бод.

    #include

    SoftwareSerial mySerial(RX, TX) – створення об'єкта, аргументи – висновки, яких підключені RX і TX.

    Serial.begin(); – встановлює швидкість порту для зв'язку ардуїно та комп'ютера.

    mySerial.overflow() – перевірка вхідного буфера на переповнення.

    Бібліотека Math

    Включає велику кількість математичних функцій для роботи з числами з плаваючою комою.

    Приклад використання:

    #include

    Math(); - Створення екземпляра Math.

    Serial.print("cos num = "); - Повертає косинус числа.

    Serial.println (fmod (double__x, double__y)); - Повертає числа по модулю.

    Бібліотека Scheduler

    Призначена для роботи з Arduino Due, що дозволяє працювати в режимі багатозадачності. Поки що є експериментальною бібліотекою.

    Приклад використання:

    #include

    Scheduler; - Створення екземпляра.

    Scheduler.startLoop() – дозволяє додати функцію, яка виконуватиметься разом із loop().

    yield() – дозволяє передати керування іншим завданням.

    Бібліотеки серво моторів та крокових двигунів

    Бібліотека Серво

    Стандартні бібліотеки. Необхідна для керування серводвигунами та часто використовується у робототехнічних проектах з маніпуляторами.

    Приклад використання:

    #include

    Servo myservo; - Створення об'єкта для серводвигуна.

    myservo.attach(); - Номер виходу, до якого підключено серводвигун.

    myservo.write(180, 30, true); - Рух на 180 градусів, швидкість 30, очікування закінчення руху.

    Бібліотека Stepper

    Необхідна для керування кроковим уніполярним та біполярним двигуном.

    #include

    const int stepsPerRevolution = ; – кількість кроків, за які двигун проходить повний поворот.

    Stepper myStepper = Stepper(steps, pin1, pin2) – створює екземпляр класу із зазначеною кількістю кроків та висновками, до яких підключається двигун.

    Бібліотеки датчиків Ардуїно

    Бібліотека DHT

    #include< DHT.h>

    DHT dht(DHTPIN, DHT11); – ініціалізує датчик (у разі DHT11).

    dht.begin(); - Запуск датчика.

    float t = dht.readTemperature(); - Зчитування поточного значення температури в градусах Цельсія.

    Бібліотека DallasTemperature

    Призначений для роботи з датчиками Dallas. Працює разом із бібліотекою OneWire.

    #include

    DallasTemperature dallasSensors(&oneWire); - Передача об'єкта oneWire для роботи з датчиком.

    покласти в регістр.

    printTemperature(sensorAddress); – запит на отримання виміряного значення температури.

    Бібліотека Ultrasonic

    Забезпечує роботу Ардуїно із ультразвуковим датчиком вимірювання відстані HC-SR04.

    #include

    Ultrasonic ultrasonic (tig, echo) – оголошення об'єкта, аргументи – контакт Trig та контакт Echo.

    dist = ultrasonic.distanceRead(); - Визначення відстані до об'єкта. Агрумент – сантиметри (СМ) чи дюйми (INC).

    Timing() – зчитування тривалості імпульсу на виході Echo, переведення в необхідну систему числення.

    Бібліотека ADXL345

    Призначається до роботи з акселерометром ADXL345.

    Приклад використання:

    #include

    ADXL345_ADDRESS – створення об'єкта, зазначення його адреси.

    ADXL345_REG_DEVID – ідентифікація пристрою.

    ADXL345_REG_OFSX – усунення осі Х.

    ADXL345_REG_BW_RATE – керування швидкістю передачі даних.

    Бібліотека BME280

    Призначається для роботи з датчиком температури, вологості та тиску BME280.

    Приклад використання:

    #include

    BME280_ADDRESS – створення об'єкта BME280, зазначення його адреси.

    begin(uint8_t addr = BME280_ADDRESS); - Початок роботи датчика.

    getTemperature – одержання виміряної температури.

    getPressure – одержання виміряного тиску.

    Бібліотека BMP280

    Потрібний для роботи з датчиком атмосферного тиску BMP280.

    Приклад використання:

    #include

    BMP280_CHIPID – створення екземпляра, вказівка ​​його адреси.

    getTemperature(float *temp); – одержання виміряної температури.

    getPressure(float *pressure); - Отримання вимірюваного значення тиску.

    Бібліотека BMP085

    Потрібний для роботи з датчиком тиску BMP085.

    Приклад використання:

    #include

    Adafruit_BMP085 bmp; - Створення екземпляра BMP085.

    dps.init(MODE_ULTRA_HIGHRES, 25000, true); - Вимірювання тиску, аргумент 25000 - висота над рівнем моря (в даному випадку 250 м. над рівнем моря).

    dps.getPressure(&Pressure); - Визначення тиску.

    Бібліотека FingerPrint

    Потрібно працювати зі сканером відбитків пальців.

    прикладвикористання:

    #include

    Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); – оголошення об'єкту Finger. Параметр – посилання на об'єкт для роботи з UART, до якого підключений модуль.

    finger.begin(); - Ініціалізація модуля відбитків пальців.

    Func_sensor_communication(); - Виклик модуля відбитків пальців.

    Бібліотеки комунікації

    Бібліотека Wire

    Потрібний для роботи з двопровідним інтерфейсом I2C.

    Приклад використання:

    #include

    Wire.begin() – ініціалізація бібліотеки, підключення до шини I2C.

    Wire.requestFrom() – запит майстром байтів від керованого пристрою.

    Wire.beginTransmission() – початок передачі на керований пристрій.

    Бібліотека Irremote

    Потрібно для роботи ардуїно з ІЧ приймачем.

    Приклад використання:

    #include

    IRrecv irrecv(RECV_PIN); - Пін, до якого підключений ІЧ приймач.

    SetPinAndButton(int ir1, int ir2, int pin) - дозволяє налаштувати певний вихід на спрацьовування при заданих значеннях ir1, ir2.

    Бібліотека GSM

    Потрібно для з'єднання через GSM-плату з мережею GSM/GRPS. З її допомогою можна реалізувати операції, що здійснюються GSM-телефоном, працювати з голосовими дзвінками та підключатися до Інтернету через GRPS.

    Приклад використання:

    #include

    GSM GSMAccess – ініціалізує екземпляр класу.

    gprs.powerOn() – увімкнення живлення.

    GPRS – налаштування підключення до Інтернету.

    GSM – керування радіо-модемом.

    Бібліотека RFID

    Потрібно для з'єднання Ардуїно та RFID-модуля.

    Приклад використання:

    #include

    RFID rfid (SS_PIN, RST_PIN); - Створення екземпляра rfid, аргументи - піни, до яких підключений модуль.

    rfid.init(); - Ініціалізація модуля RFID.

    Бібліотека MFRC 522

    Потрібно для з'єднання Ардуїно та MFRC522-модуля.

    Приклад використання:

    #include

    MFRC522 mfrc522(SS_PIN, RST_PIN); – створення екземпляра MFRC522, аргументами вказані виходи, до яких підключено модуль.

    mfrc522.PCD_Init(); - Ініціалізація MFRC522.

    Бібліотека Ethershield

    Нова версія https://github.com/jcw/ethercard

    Потрібно для підключення Ардуїно до локальної мережі або Інтернету. Бібліотека більше не підтримується, новіша версія Ethercard. Також є стандартна бібліотека Ethernet.

    Приклад використання:

    #include «EtherShield.h»

    #include

    EtherShield es = EtherShield(); – підготовка веб-сторінки

    ether.begin(sizeof Ethernet::buffer, mymac,); - Початок роботи, аргументи - адреса Mac і номер порту, до якого підключено вихід CS.

    Бібліотека Nrf24l01

    Потрібно для роботи з RF24-радіомодулем.

    Приклад використання:

    #include “RF24.h”

    RF24 - Конструктор створює новий екземпляр драйвера. Перед використанням потрібно створити екземпляр і вказати піни, до яких підключений чіп (_cepin: контакт модуля Enable, cspin: контакт модуля Select).

    Begin – початок роботи чіпа.

    setChannel – канали зв'язку RF.

    setPayloadSize – встановлення фіксованого розміру передачі.

    getPayloadSize – отримання фіксованого розміру.

    Бібліотека TinyGPS

    Потрібно читати повідомлення GPGGA і GPRMC. Допомагає зчитувати дані про положення, дату, час, висоту та інші параметри.

    Приклад використання:

    #include

    TinyGPS gps; - Створення екземпляра TinyGPS.

    encode() – подача на об'єкт послідовних даних за одним символом.

    gps.stats() – метод статистики. Показує, чи отримані коректні дані чи ні.

    Бібліотеки в Arduino IDE

    Серед усієї різноманітності бібліотек можна виділити 3 основні групи:

    • Вбудовані – це бібліотеки, які спочатку встановлені в середовищі Arduino IDE. Їх не потрібно завантажувати та встановлювати додатково, вони доступні для використання у програмі відразу після запуску середовища розробки.
    • Додаткові – це бібліотеки, які потрібно самостійно завантажувати. Зазвичай, такий вид бібліотек розробляє виробник датчиків, сенсорів та інших компонентів для полегшення роботи з ардуїно.
    • Залежні бібліотеки – встановлюються як помічник додаткової бібліотеки, що окремо від неї не працює.

    Найпростішим способом роботи з бібліотеками в Ардуїно є використання вбудованих можливостей середовища розробки Arduino IDE. Про це ми поговоримо у окремій статті.

    LCD дисплей- Частий гість у проектах Ардуїно. Але в складних схемах у нас може виникнути проблема нестачі портів Arduino через необхідність підключити екран, який має дуже багато контактів. Виходом у цій ситуації може стати I2C /IICперехідник, який підключає практично стандартний для Arduino екран 1602 до плат Uno, Nano або Mega лише за допомогою 4 пінів. У цій статті ми подивимося, як можна підключити LCD екран з інтерфейсом I2C, які можна використовувати бібліотеки, напишемо короткий приклад і розберемо типові помилки.

    Рідкокристалічний дисплей (Liquid Crystal Display) LCD 1602є гарним вибором для виведення рядків символів у різних проектах. Він коштує недорого, є різні модифікації з різними кольорами підсвічування, ви можете легко завантажити готові бібліотеки для скетч Ардуїно. Але найголовнішим недоліком цього екрану є той факт, що дисплей має 16 цифрових висновків, з яких обов'язковими є мінімум 6. Тому використання цього екрану LCD без i2c додає серйозні обмеження для плат Arduino Uno або Nano. Якщо контактів не вистачає, вам доведеться купувати плату Arduino Mega або ж заощадити контакти, в тому числі за рахунок підключення дисплея через i2c.

    Короткий опис пінів LCD 1602

    Давайте подивимося на висновки LCD1602 уважніше:

    Кожен із висновків має своє призначення:

    1. Земля GND;
    2. Харчування 5;
    3. Встановлення контрастності монітора;
    4. Команда, дані;
    5. Записування та читання даних;
    6. Enable;

    7-14. Лінії даних;

    1. Плюс підсвічування;
    2. Мінус підсвічування.

    Технічні характеристики дисплея:

    • Символьний тип відображення є можливість завантаження символів;
    • Світлодіодна підсвітка;
    • Контролер HD44780;
    • Напруга живлення 5В;
    • Формат 16х2 символів;
    • Діапазон робочих температур від -20°С до +70°С, діапазон температур зберігання від -30°С до +80°С;
    • Кут огляду 180 градусів.

    Схема підключення LCD до плати Ардуїно без i2C

    Стандартна схема приєднання монітора безпосередньо до мікроконтролера Ардуїно без I2C виглядає так.

    Через велику кількість контактів, що підключаються, може не вистачити місця для приєднання потрібних елементів. Використання I2C зменшує кількість дротів до 4, а зайнятих пінів до 2.

    Де купити LCD екрани та шилди для ардуїно

    LCD екран 1602 (і варіант 2004) досить популярний, тому ви без проблем зможете знайти його як у вітчизняних інтернет магазинах, так і на закордонних майданчиках. Наведемо кілька посилань на найдоступніші варіанти:

    Модуль LCD1602+I2C із синім екраном, сумісний з Arduino Простий дисплей LCD1602 (зелене підсвічування) дешевше 80 рублів Великий екран LCD2004 з I2C HD44780 для ардуїно (синє та зелене підсвічування)
    Дисплей 1602 з IIC адаптером та синім підсвічуванням Ще один варіант LCD1602 із впаяним I2C модулем Модуль адаптера Port IIC/I2C/TWI/SPI для екрана 1602, сумісний з Ардуїно
    Дисплей з RGB-підсвічуванням! LCD 16×2 + keypad +Buzzer Shield for Arduino Шилд для Ардуїно з кнопками та екраном LCD1602 LCD 1602 LCD дисплей для 3D принтера (Smart Controller for RAMPS 1.4, Text LCD 20×4), модулем кардрідера SD та MicroSD-

    Опис протоколу I2C

    Перш ніж обговорювати підключення дисплея до ардуїно через i2c-перехідник, коротко поговоримо про сам протокол i2C.

    I2C/IIC(Inter-Integrated Circuit) – це протокол, що спочатку створювався для зв'язку інтегральних мікросхем усередині електронного пристрою. Розробка належить фірмі Philips. В основі i2c протоколу є використання 8-бітної шини, яка потрібна для зв'язку блоків в електроніці, що управляє, і системі адресації, завдяки якій можна спілкуватися по одним і тим же проводам з декількома пристроями. Ми просто надаємо дані то одному, то іншому пристрою, додаючи до пакетів даних ідентифікатор потрібного елемента.

    Найпростіша схема I2C може містити один провідний пристрій (найчастіше це мікроконтролер Ардуїно) та кілька ведених (наприклад, дисплей LCD). Кожен пристрій має адресу в діапазоні від 7 до 127. Двох пристроїв з однаковою адресою в одній схемі не повинно бути.

    Плата Arduino підтримує i2c на апаратному рівні. Ви можете використовувати піни A4 та A5 для підключення пристроїв за цим протоколом.

    У роботі I2C можна виділити кілька переваг:

    • Для роботи потрібно лише 2 лінії – SDA (лінія даних) та SCL (лінія синхронізації).
    • Підключення великої кількості провідних приладів.
    • Зменшення часу розробки.
    • Для керування всім набором пристроїв потрібен лише один мікроконтролер.
    • Можливе число мікросхем, що підключаються, до однієї шини обмежується тільки граничною ємністю.
    • Висока ступінь збереження даних через спеціальний фільтр пригнічує сплески, вбудованого в схеми.
    • Проста процедура діагностики збоїв, що виникають, швидке налагодження несправностей.
    • Шина вже інтегрована в саму Arduino, тому не потрібно додатково розробляти шинний інтерфейс.

    Недоліки:

    • Існує ємнісне обмеження на лінії – 400 пФ.
    • Важке програмування контролера I2C, якщо на шині є кілька різних пристроїв.
    • При велику кількість пристроїв виникає труднощі локалізації збою, якщо один з них помилково встановлює стан низького рівня.

    Модуль i2c для LCD 1602 Arduino

    Найшвидший та найзручніший спосіб використання i2c дисплея в ардуїно – це покупка готового екрану з вбудованою підтримкою протоколу. Але таких екранів не дуже вистають вони не дешево. А ось різноманітних стандартних екранів випущено вже величезну кількість. Тому найдоступнішим і найпопулярнішим сьогодні варіантом є купівля та використання окремого I2C модуля – перехідника, який виглядає ось так:

    З одного боку модуля ми бачимо висновки i2c – земля, живлення та 2 для передачі даних. З іншого перехідника бачимо роз'єми зовнішнього живлення. І, природно, на платі є безліч ніжок, за допомогою яких модуль припаює до стандартних висновків екрану.


    Для підключення до плати Ардуїно використовуються i2c виходи. Якщо потрібно, підключаємо зовнішнє живлення для підсвічування. За допомогою вбудованого підстроювального резистора ми можемо налаштувати настроювання контрастності J

    На ринку можна зустріти LCD 1602 модулі з припаяними перехідниками, їх використання максимально упощено. Якщо ви купили окремий перехідник, потрібно буде заздалегідь припаяти його до модуля.

    Підключення РК екрану до Ардуїно за I2C

    Для підключення необхідні сама плата Ардуїно, дисплей, макетна плата, з'єднувальні дроти та потенціометр.

    Якщо ви використовуєте спеціальний окремий i2c перехідник, потрібно спочатку припаяти його до модуля екрана. Помилитись там важко, можете керуватися такою схемою.


    Рідкокристалічний монітор з підтримкою i2c підключається до плати за допомогою чотирьох дротів – два дроти для даних, два дроти для живлення.

    • Висновок GND підключається до GND на платі.
    • Висновок VCC – на 5V.
    • SCL підключається до піну A5.
    • SDA підключається до піну A.

    І це все! Жодних павутин проводів, в яких дуже легко заплутатися. При цьому всю складність реалізації протоколу i2C ми можемо просто довірити бібліотекам.

    Бібліотеки для роботи з i2c LCD дисплеєм

    Для взаємодії Arduino c LCD 1602 по шині I2C вам знадобиться як мінімум дві бібліотеки:

    • Бібліотека Wire.h для роботи з I2C вже є у стандартній програмі Arduino IDE.
    • Бібліотека LiquidCrystal_I2C.h, яка включає велику різноманітність команд для управління монітором по шині I2C і дозволяє зробити скетч простіше і коротше. Потрібно додатково встановити бібліотеку Після підключення екрана потрібно додатково встановити бібліотеку LiquidCrystal_I2C.h

    Після підключення до скетчу всіх необхідних бібліотек ми створюємо об'єкт і можемо використовувати його функції. Для тестування завантажимо наступний стандартний скетч з прикладу.

    #include #include // Підключення бібліотеки //#include // Підключення альтернативної бібліотеки LiquidCrystal_I2C lcd(0x27,16,2); // Вказуємо I2C адресу (найпоширеніше значення), і навіть параметри екрана (у разі LCD 1602 - 2 рядки по 16 символів у кожному //LiquidCrystal_PCF8574 lcd(0x27); // Варіант для бібліотеки PCF8574 void setup() ( lcd.init (); // Ініціалізація дисплея lcd.backlight(); // Підключення підсвічування lcd.setCursor(0,0); // Встановлення курсору на початок першого рядка lcd.print("Hello"); // Набір тексту на першому рядку lcd.setCursor(0,1); // Встановлення курсору на початок другого рядка lcd.print("ArduinoMaster"); // Набір тексту на другому рядку ) void loop() ( )

    Опис функцій та методів бібліотеки LiquidCrystal_I2C:

    • home() і clear() – перша функція дозволяє повернути курсор на початок екрана, друга теж, але при цьому видаляє все, що було на моніторі до цього.
    • write(ch) – дозволяє вивести одиночний символ ch на екран.
    • cursor() та noCursor() – показує/приховує курсор на екрані.
    • blink() і noBlink() – курсор блимає/не блимає (якщо раніше було включено його відображення).
    • display() та noDisplay() – дозволяє підключити/вимкнути дисплей.
    • scrollDisplayLeft() та scrollDisplayRight() – прокручує екран на один знак ліворуч/праворуч.
    • autoscroll() та noAutoscroll() – дозволяє увімкнути/вимкнути режим автопрокручування. У цьому режимі кожен новий символ записується в тому самому місці, витісняючи раніше написане на екрані.
    • leftToRight() і rightToLeft() – Встановлення напряму виведеного тексту – зліва направо або праворуч наліво.
    • createChar(ch, bitmap) – створює символ із кодом ch (0 – 7), використовуючи масив бітових масок bitmap для створення чорних та білих точок.

    Альтернативна бібліотека для роботи з дисплеєм i2c

    У деяких випадках при використанні зазначеної бібліотеки з пристроями, оснащеними контролерами PCF8574, можуть виникати помилки. У цьому випадку альтернативою можна запропонувати бібліотеку LiquidCrystal_PCF8574.h. Вона розширює LiquidCrystal_I2C, тому проблем із її використанням не повинно бути.

    Проблеми підключення i2c lcd дисплея

    Якщо після завантаження скетча у вас не з'явиться жодного напису на дисплеї, спробуйте виконати такі дії.

    По-перше, можна збільшити чи зменшити контрастність монітора. Часто символи просто не видно через режим контрастності та підсвічування.

    Якщо це не допомогло, перевірте правильність підключення контактів, чи підключено живлення підсвічування. Якщо ви використовували окремий i2c перехідник, перевірте ще раз якість паяння контактів.

    Іншою частою причиною відсутності тексту на екрані може стати неправильна i2c адреса. Спробуйте спочатку поміняти в скетчі адресу пристрою з 0x27 0x20 або 0x3F. У різних виробників можуть бути різні адреси за замовчуванням. Якщо це не допомогло, можете запустити скетч i2c сканера, який переглядає всі підключені пристрої та визначає їх адресу методом перебору. Приклад скетчу i2c сканера.

    Якщо екран все ще залишиться неробочим, спробуйте відпаяти перехідник та підключити LCD звичайним чином.

    Висновок

    У цій статті ми розглянули основні питання використання LCD екрану у складних проектах Ардуїно, коли нам потрібно економити вільні піни на платі. Простий і недорогий перехідник i2c дозволить підключити LCD екран 1602, займаючи всього 2 аналогові піни. У багатьох ситуаціях це може бути дуже важливим. Плата за зручність – необхідність використання додаткового модуля – конвертера та бібліотеки. На наш погляд, зовсім не висока ціна за зручність і ми рекомендуємо використовувати цю можливість у проектах.

    Опис бібліотеки Wire

    Дана бібліотека дозволяє вам взаємодіяти з I2C/TWI пристроями. На платах Arduino з компонуванням R3 (розпинання 1.0) SDA (лінія даних) та SCL (лінія тактового сигналу) знаходяться на висновках біля виводу AREF. Arduino Due має два I2C/TWI інтерфейси: SDA1 і SCL1 знаходяться біля виводу AREF, а додаткові лінії знаходяться на висновках 20 та 21.

    У таблиці нижче показано, де розташовані TWI висновки різних платах Arduino.

    Починаючи з Arduino 1.0, ця бібліотека успадковує функції Stream, що робить її сумісною з іншими бібліотеками читання/запису. Через це send() та receive() були замінені на read() та write() .

    Примітка

    Існують 7- та 8-бітні версії адрес I2C. 7 бітів ідентифікують пристрій, а восьмий біт визначає, чи йде запис або читання. Бібліотека Wire використовує 7 бітові адреси. Якщо у вас є технічний опис або приклад коду, де використовується 8-бітна адреса, вам потрібно відкинути молодший біт (тобто зрушити значення на один біт праворуч), отримавши адресу від 0 до 127. Однак адреси від 0 до 7 не використовуються , оскільки зарезервовані, тому першою адресою, яка може бути використана, є 8. Зверніть увагу, що при підключенні висновків SDA/SCL необхідні резистори, що підтягують. Докладніше дивіться приклади. На платі MEGA 2560 є резистори, що підтягують, на висновках 20 і 21.

    Опис методів

    Wire.begin()

    Опис

    Ініціалізує бібліотеку Wire та підключається до шини I2C як ведучий (майстер) або ведений. Як правило, має викликатися лише один раз.

    Синтаксис

    Wire.begin(address)

    Параметри

    address: 7-бітна адреса веденого пристрою (необов'язково); якщо не заданий, плата підключається до шини як майстер.

    Значення, що повертається

    приклад

    Приклади для керованого пристрою дивіться в прикладах до методів onReceive() та onRequest() . Приклади для провідного пристрою дивіться у прикладах до інших методів. .

    Wire.requestFrom()

    Опис

    Використовується майстром для запиту байтів від керованого пристрою. Ці байти може бути отримано з допомогою методів available() і read() .

    Якщо цей аргумент дорівнює true, то requestFrom() після запиту посилає повідомлення STOP, звільняючи шину I2C.

    Якщо цей аргумент дорівнює false, то requestFrom() після запиту надсилає повідомлення RESTART. Шина не звільняється, що заважає іншому пристрої-майстру влізти між повідомленнями. Це дозволяє одному провідному пристрою посилати кілька запитів, доки він контролює шину.

    Синтаксис

    Wire.requestFrom(address, quantity)

    Wire.requestFrom(address, quantity, stop)

    Параметри

    • address: 7-бітна адреса пристрою, у якого запитуються байти;
    • quantity: кількість байтів, що запитуються;
    • stop: boolean. true посилає повідомлення STOP після запиту. false посилає повідомлення RESTART після запиту, зберігаючи активне з'єднання.
    Значення, що повертається

    byte: кількість байтів, повернутих від веденого пристрою.

    приклад

    Wire.beginTransmission()

    Опис

    Починає передачу на ведений I2C пристрій із заданою адресою. Після нього послідовність байтів передачі ставиться у чергу з допомогою функції write() , та його передача з допомогою виклику endTransmission() .

    Синтаксис

    Wire.beginTransmission(address)

    Параметри

    address: 7-бітна адреса пристрою, на яку необхідно передати дані.

    Значення, що повертається

    приклад

    Wire.endTransmission()

    Опис

    Завершує передачу на ведений пристрій, яка була розпочата методом beginTransmission() і передає байти, які були поставлені в чергу методом write().

    Для сумісності з певними пристроями I2C, починаючи з Arduino 1.0.1, requestFrom() приймає аргумент логічного типу даних, що змінює його поведінку.

    Якщо цей аргумент дорівнює true, то requestFrom() після передачі посилає повідомлення STOP, звільняючи шину I2C.

    Якщо цей аргумент дорівнює false, то requestFrom() після передачі посилає повідомлення RESTART. Шина не звільняється, що заважає іншому пристрої-майстру влізти між повідомленнями. Це дозволяє одному провідному пристрою посилати кілька передач, доки він контролює шину.

    За умовчанням цей аргумент дорівнює true.

    Синтаксис

    Wire.endTransmission()

    Wire.endTransmission(stop)

    Параметри

    stop: boolean. true посилає повідомлення STOP після передачі. false посилає повідомлення RESTART після передачі, зберігаючи активне з'єднання.

    Значення, що повертається

    byte , який вказує на стан передачі:

    • 0: успіх;
    • 1: дані надто довгі для заповнення буфера передачі;
    • 2: прийнятий NACK під час передачі адреси;
    • 3: прийнятий NACK під час передачі даних;
    • 4: решта помилок.
    приклад

    Дивіться приклад до методу write().

    Wire.write()

    Опис

    Записує дані від веденого пристрою у відповідь на запит від провідного пристрою, або ставить у чергу байти для передачі від майстра до веденого пристрою (між викликами beginTransmission() та endTransmission()).

    Синтаксис

    Wire.write(value)

    Wire.write(string)

    Wire.write(data, length)

    Параметри

    • value: значення передачі, один байт.
    • string: рядок передачі, послідовність байтів.
    • data: масив даних передачі, байти.
    • length: кількість байтів передачі.
    Значення, що повертається

    byte: write() повертає кількість записаних байтів, хоча читання цієї кількості не обов'язково.

    Приклад #include byte val = 0; void setup() ( Wire.begin(); // підключитися до шини i2c ) void loop() ( Wire.beginTransmission(44); // передача на пристрій #44 (0x2c) // адресу пристрою заданий у технічному описі Wire. write(val); // відправити байт значення Wire.endTransmission(); // зупинити передачу val++; // збільшити значення if(val == 64) // якщо сягнули 64-го значення (max) ( val = 0; // почати з початку) delay (500);

    Wire.available()

    Опис

    Повертає кількість байтів, доступних отримання за допомогою read() . Цей метод повинен викликатись на провідному пристрої після виклику requestFrom() або на веденому пристрої всередині обробника onReceive() .

    Синтаксис

    Wire.available()

    Параметри

    Значення, що повертається

    Кількість байт, доступних для читання.

    приклад

    Дивіться приклад до методу read().

    Wire.read()

    Опис

    Зчитує байт, який був переданий від веденого пристрою до ведучого після виклику requestFrom() , або який був переданий від провідного пристрою до веденого.

    Синтаксис

    Параметри

    Значення, що повертається

    byte: черговий байт прийнятий.

    Приклад #include byte val = 0; void setup() ( Wire.begin(); // підключитися до шини i2c (адреса для майстра не обов'язковий) Serial.begin(9600); // налаштувати послідовний порт для виведення ) void loop() ( Wire.requestFrom(2, 6);// запитати 6 байтів від веденого пристрою #2 while(Wire.available()) // ведений пристрій може надіслати менше, ніж запрошено (char c = Wire.read(); // прийняти байт як символ Serial.print (c); // надрукувати символ ) delay(500);

    Wire.setClock()

    Опис

    Змінює тактову частоту зв'язку по шині I2C. У ведених I2C пристроїв немає мінімальної робочої тактової частоти, проте зазвичай використовується 100 кГц.

    Синтаксис

    Wire.setClock(clockFrequency)

    Параметри

    clockFrequency: значення частоти (в герцах) тактового сигналу. Приймаються значення 100000 (стандартний режим) та 400000 (швидкий режим). Деякі процесори також підтримують 10000 (низькошвидкісний режим), 1000000 (швидкий режим плюс) та 3400000 (високошвидкісний режим). Щоб переконатися, що необхідний режим підтримується, зверніться до документації на конкретний процесор.

    Значення, що повертається

    Wire.onReceive()

    Опис

    Реєструє функцію, яка буде викликатися, коли керований пристрій приймає передачу від майстра.

    Синтаксис

    Wire.onReceive(handler)

    Параметри

    handler: функція, яка повинна буде викликатись, коли ведений пристрій приймає дані; вона повинна приймати один параметр int (кількість байтів, прочитаних від майстра) і нічого не повертати, тобто:

    void myHandler(int numBytes)

    Значення, що повертається

    приклад

    #include void setup() ( Wire.begin(8); // підключитися до i2c шини з адресою #8 Wire.onReceive(receiveEvent); // зареєструвати обробник події Serial.begin(9600); // налаштувати послідовний порт для виведення ) void loop() ( delay(100); ) // функція, яка буде виконуватися щоразу, коли від майстра приймаються дані // дана функція реєструється як обробник події, дивіться setup() void receiveEvent(int howMany) ( while (1< Wire.available()) // пройтись по всем до последнего { char c = Wire.read(); // принять байт как символ Serial.print(c); // напечатать символ } int x = Wire.read(); // принять байт как целое число Serial.println(x); // напечатать число }

    Wire.onRequest()

    Опис

    Реєструє функцію, яка буде викликатись, коли майстер запитує дані від веденого пристрою.

    Синтаксис

    Wire.onRequest(handler)

    Параметри

    handler: функція, яка повинна буде викликатись, вона не приймає параметрів і нічого не повертає, тобто:

    void myHandler()

    Значення, що повертається

    приклад

    Код для плати Arduino, що працює як ведений пристрій:

    #include void setup() ( Wire.begin(8); // підключитися до i2c шини з адресою #8 Wire.onRequest(requestEvent); // зареєструвати обробник події ) void loop() ( delay(100); ) // функція, яка буде виконуватися щоразу, коли майстром будуть // запитані дані // дана функція реєструється як обробник події, дивіться setup() void requestEvent() ( Wire.write("hello "); // відповісти повідомленням )