Ардуино термометр на основе датчика температуры ds18b20

Интерфейсная шина i²c/библиотека wire

Wire Library

The Wire library is what Arduino uses to communicate with I2C devices. It is included in all board packages, so you don’t need to install it manually in order to use it.

To see the full API for the Wire library, visit its documentation page.

  • — Initialise the I2C bus
  • — Close the I2C bus
  • — Request bytes from a peripheral device
  • — Begins queueing up a transmission
  • — Transmit the bytes that have been queued and end the transmission
  • — Writes data from peripheral to controller or vice versa
  • — returns the number of bytes available for retrieval
  • — Reads a byte that was transmitted from a peripheral to a controller.
  • — Modify the clock frequency
  • — Register a function to be called when a peripheral receives a transmission
  • — Register a function to be called when a controller requests data
  • — Sets the timeout for transmissions in controller mode
  • — Clears the timeout flag
  • — Checks whether a timeout has occurred since the last time the flag was cleared.

Derived libraries

When you buy basically any breakout module that makes use of the I2C protocol, they will come with some library that helps you use the sensor. This library is more often than not built on top of the Wire library, and uses it under the hood. Adding functionality in order to make, for example, reading temperature easier.

An example of this is if you want to use Adafruits MCP9808 sensor module, you download the Adafruit_MCP9808 Library from the IDEs library manager, which enables you to use functions such as

To learn how to install libraries, check out our guide to installing libraries.

Методы библиотеки

begin()

Инициализация библиотеки Wire и подключение к шине I2C в качестве ведущего или ведомого устройства. Как правило, вызывается только один раз.

Параметры

address: 7-битный адрес устройства (если работаем в режиме ведомого). Если не указано, то контроллер подключается к шине в роли ведущего (master).

requestFrom()

Используется ведущим устройством для запроса байта от ведомого устройства. Байты могут быть получены с помощью методов available() и read().

Параметры

  • address: 7-битный адрес устройства для запроса байтов данных
  • quantity: количество запрошенных байт

Возвращает число считанных байт.

beginTransmission()

Начало передачи I2C для ведомого устройства с заданным адресом. Затем, нужно вызвать метод write() для добавления последовательности байт в очередь предназначенных для передачи, и выполнить саму передачу данных методом endTransmission().

Параметры

address: 7-битный адрес устройства для передачи.

endTransmission()

Завершает передачу данных для ведомого устройства, которое было начато beginTransmission() и, фактически, осуществляет передачу байт, которые были поставлены в очередь методом write().

Параметры

Нет

Возвращает байт, который указывает статус передачи:

  • 0: успех
  • 1: данных слишком много и они не помещается в буфер передачи/размер буфера задаётся определением #define BUFFER_LENGTH 32
  • 2: получили NACK на передачу адреса
  • 3: получили NACK на передачу данных
  • 4: другая ошибка

write()

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

Параметры

  • value: значение для отправления как единичный байт
  • string: строка для отправления как последовательность байт
  • data: массив байт для отправления
  • length: число байт для передачи

Возвращает число записанных байт.

available()

Метод available() наследуется от класса Stream. Возвращает количество байт, доступных для получения. Этот метод должно быть вызван на мастере, после вызова requestFrom() или ведомым внутри обработчика onReceive().

Параметры

Нет.

Число байт, доступных для чтения.

read()

Метод read() наследуется от класса Stream. Считывает байт, который был передан от ведомого устройства к мастеру, после вызова requestFrom() или был передан от мастера к ведомому.

Параметры

Нет.

Следующий полученный байт.

onReceive()

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

Параметры

function: функция, которая вызывается, когда ведомый получает данные; обработчик должен принимать один параметр — int (число байт, считанных от мастера) и ничего не возвращать. Например:
void MyHandler (int numBytes);

Параметры

function: функция, которая будет вызываться; не имеет параметров и ничего не возвращает.
например:
void MyHandler();

Шина I2C

I2C (Inter Integrated Circuit) – простая двунаправленная шина обмена данных. Имеет в своей конструкции два провода. Разработана компанией Philips в 80-х годах. Широко применяется в интегральной схемотехнике. Шина сконструирована как простая сигнальная.

Провода имеют следующие названия:

  • SDA (Serial Data) – шина данных
  • SCL – (Serial Clock) – тактовая шина

Структурная схема шины I2C

Устройства подключаемые к шине, присоединяются к каждому из проводов. Основным является MASTER (ведущее устройство). Он формирует тактовые сигналы, начало и конец передачи на шине данных. Таким образом импульсы исходят от него, а данные могут проходить в обе стороны.

Данные могут формироваться как MASTER, так и другими “подчиненными” устройствами:

  • измерители
  • АЦП
  • ЖКИ
  • память
  • электронные датчики
  • др.

Все указанные в списке устройства подключаются к шине параллельно. На одной электронной плате, подчиненных устройств может быть большое количество.

Стандарт шины имеет наличие адреса. Выделяется 7 бит, то есть два в седьмой степени, и означает количество устройств порядка 100.

Частоты на шине f = 100 – 10 кбит/с. Поэтому она является низкоскоростной. Общая емкость по шине не должно превышать 400 пФ (которое складывается из всех подключаемых к ней устройств). Питание на шине может быть:

  • 3,3 V
  • 5,0 V

Сигнальные линии подтянуты к питающему устройству через резисторы, сопротивление которых от 5 до 10 кОм

Это важно, так как благодаря этому изменяется паразитная емкость, что в свою очередь влияет на количество SLAVE и скорость передачи информации. Длина шины может достигать нескольких метров. 

Алгоритм передачи данных:

  1. Данные могут меняться, когда на шине SCL присутствует 0 (логический уровень). Если на SCL присутствует 1 (логический уровень), данные меняться не могут. В данном случае возникают две ситуации, когда на шине SCL происходит переход:
    1. из 1 в 0
    2. из 0 в 1

Это означает, что MASTER хочет обменяться информацией с “подчиненными” устройствами и подает команду “ВНИМАНИЕ”. При переходе: 

  • из 1 в 0 – стартовая ситуация
  • из 0 в 1 – стоповая ситуация 

Важно помнить, что сигнал SCL может формировать только MASTER

  1.  Вся передача передается байтами. Байты передаются побитно, начиная со старшего бита. В ответ на каждый полученный байт, приемник выставляет либо подтверждение, либо отказ. 

Преимущества шины I2C:

  • простота конструкции
  • возможность подключения подчиненных SLAVE без отключения питания

Недостатки шины I2C:

ограничение по емкости

Организация передачи и приема данных по шине I2C

Объяснение программы для ведомой (Slave) платы Arduino

1. Как и в ведущей плате, первым делом в программе мы должны подключить библиотеку Wire для задействования возможностей протокола I2C и библиотеку для работы с ЖК дисплеем. Также нам необходимо сообщить плате Arduino к каким ее контактам подключен ЖК дисплей.

Arduino

#include<Wire.h>
#include<LiquidCrystal.h>
LiquidCrystal lcd(2, 7, 8, 9, 10, 11);

1
2
3

#include<Wire.h>    
#include<LiquidCrystal.h>      

LiquidCrystallcd(2,7,8,9,10,11);

  1. В функции void setup():

—  мы инициализируем последовательную связь со скоростью 9600 бод/с;

Arduino

Serial.begin(9600);

1 Serial.begin(9600);

— далее мы инициализируем связь по протоколу I2C на контактах A4 и A5

В качестве адреса ведомого мы будем использовать значение 8 – очень важно здесь указать адрес ведомого;. Arduino

Wire.begin(8);

Arduino

Wire.begin(8);

1 Wire.begin(8);

После этого мы должны вызвать функцию в которой ведомый принимает значение от ведущего и функцию в которой ведущий запрашивает значение от ведомого.

Arduino

Wire.onReceive(receiveEvent);
Wire.onRequest(requestEvent);

1
2

Wire.onReceive(receiveEvent);

Wire.onRequest(requestEvent);

— затем мы инициализируем ЖК дисплей для работы в режиме 16х2, отображаем на нем приветственное сообщение и очищаем его экран через 5 секунд.

Arduino

lcd.begin(16,2); //Initilize LCD display
lcd.setCursor(0,0); //Sets Cursor at first line of Display
lcd.print(«Circuit Digest»); //Prints CIRCUIT DIGEST in LCD
lcd.setCursor(0,1); //Sets Cursor at second line of Display
lcd.print(«I2C 2 ARDUINO»); //Prints I2C ARDUINO in LCD
delay(5000); //Delay for 5 seconds
lcd.clear(); //Clears LCD display

1
2
3
4
5
6
7

lcd.begin(16,2);//Initilize LCD display

lcd.setCursor(,);//Sets Cursor at first line of Display

lcd.print(«Circuit Digest»);//Prints CIRCUIT DIGEST in LCD

lcd.setCursor(,1);//Sets Cursor at second line of Display

lcd.print(«I2C 2 ARDUINO»);//Prints I2C ARDUINO in LCD

delay(5000);//Delay for 5 seconds

lcd.clear();//Clears LCD display

3. Затем нам будут необходимы две функции: одна для события запроса (request event) и одна для события приема (receive event).

Для события запроса:

Эта функция будет выполняться когда ведущий будет запрашивать значение от ведомого. Эта функция будет считывать значение с потенциометра, подключенного к ведомой плате Arduino, преобразовывать его в диапазон 0-127 и затем передавать его ведущей плате.

Arduino

void requestEvent()
{
int potvalue = analogRead(A0);
byte SlaveSend = map(potvalue,0,1023,0,127);
Wire.write(SlaveSend);
}

1
2
3
4
5
6

voidrequestEvent()

{

intpotvalue=analogRead(A0);

byteSlaveSend=map(potvalue,,1023,,127);

Wire.write(SlaveSend);

}

Для события приема:

Эта функция будет выполняться когда ведущий будет передавать данные ведомому с адресом 8. Эта функция считывает принятые значения от ведущего и сохраняет ее в переменной типа byte.

Arduino

void receiveEvent (int howMany)
{
SlaveReceived = Wire.read();
}

1
2
3
4

voidreceiveEvent(inthowMany)

{

SlaveReceived=Wire.read();

}

4. В функции Void loop():

Мы будем непрерывно отображать принятые от ведущей платы значения на экране ЖК дисплея.

Arduino

void loop(void)
{
lcd.setCursor(0,0); //Sets Currsor at line one of LCD
lcd.print(«>> Slave <<«); //Prints >> Slave << at LCD
lcd.setCursor(0,1); //Sets Cursor at line two of LCD
lcd.print(«MasterVal:»); //Prints MasterVal: in LCD
lcd.print(SlaveReceived); //Prints SlaveReceived value in LCD received from Master
Serial.println(«Slave Received From Master:»); //Prints in Serial Monitor
Serial.println(SlaveReceived);
delay(500);
lcd.clear();
}

1
2
3
4
5
6
7
8
9
10
11
12

voidloop(void)

{

lcd.setCursor(,);//Sets Currsor at line one of LCD

lcd.print(«>>  Slave  <<«);//Prints >> Slave << at LCD

lcd.setCursor(,1);//Sets Cursor at line two of LCD

lcd.print(«MasterVal:»);//Prints MasterVal: in LCD

lcd.print(SlaveReceived);//Prints SlaveReceived value in LCD received from Master

Serial.println(«Slave Received From Master:»);//Prints in Serial Monitor

Serial.println(SlaveReceived);

delay(500);

lcd.clear();

}

После того как вы соберете всю схему проекта и загрузите обе программы в платы Arduino вы можете приступать к тестированию работы проекта. Вращая потенциометр на одной стороне вы должны увидеть изменяющиеся значения на экране ЖК дисплея на другой стороне.

Теперь, когда вы разобрались, как работать с интерфейсом I2C в плате Arduino, вы можете использовать описанные в данной статье приемы для подключения к плате Arduino любых датчиков, работающих по данному протоколу.

Функции I2C в Arduino

Для того, что бы использовать интерфейс I2C в arduino, необходимо подключить библиотеку Wire.h. Эта библиотека содержит все функции по инициализации, приему и передаче данных по шине.

Wire.write(data)

Данная функция используется для записи (передачи) данных на ведущее или ведомое устройство.

Параметр

data
это однобайтовое значение, строка, массив данных.

Возвращает

Количество записанных байтов

Пример

Wire.write(7); // отправляем байт данных
Wire.write("i2c"); //отправляем строку на ведомое устройство
Wire.write(a, 6); // здесь а массив
Wire.available()

Функция применяется мастером или ведомым устройством для проверки наличия запрошенных данных. Она возвращает количество байт, которые можно считать.

Wire.read()

Данная функция предназначена для чтения данных, запрошенных мастером с ведомого, или чтения данных, переданных от ведущего к мастеру.

Примечание

Каждое ведомое устройство I2C имеет уникальный адрес. Во время обмена данными этот адрес подчиненного устройства необходимо использовать мастером для инициализации обмена.

Wire.begin ()

Функция инициализирует библиотеку Wire.h и подключает устройство к шине I2C в качестве мастера.

Wire.beginTransmission(slave address)

Эта функция начинает передачу с ведомого устройства I2C, имеющего свой уникальный адрес.

Параметр

slave address
7-битный адрес устройства, с которым мы хотим установить связь

Пример

Wire.beginTransmission (50) //начать передачу с ведомого устройства с адресом 50.
Wire.requestFrom(address, quantity)

ИЛИ

Wire.requestFrom(address, quantity, stop)

Эта функция используется мастером для запроса или получения данных от ведомого устройства. Запрошенные данные можно прочитать с помощью

Wire.read()

Параметры

address
адрес устройства, с которым мы хотим общаться
quantity
количество запрашиваемых байт
stop
значение true или false. true — отправлять стоп-сообщение после запроса, освобождая шину. false — постоянно отправлять перезагрузку после запроса, сохраняя соединение активным

Возвращает

Число байт, возвращенных ведомым устройством

Пример

Wire.requestFrom(50, 4)           // запрос 4-х байт от ведомого устройства с адресом 50
Wire.requestFrom(50, 4, true) //перестанет получать данные после 4 байт, освобождая  шину.
Wire.endTransmission()

Функция завершает передачу на ведомое устройство, начатую функцией

beginTransmission()

, и передает байты, поставленные в очередь функцией

write()

Возвращает

Байт, который указывает статус передачи.

Wire.begin(address)

Функция инициирует библиотеку Wire и подключается к шине I2C в качестве подчиненного устройства с указанным адресом.

Параметр

address
7-битный адрес ведомого устройства, если он не указан, присоединяйтесь к шине в качестве ведущего.
Wire.onReceive(handler)

Функция обработчика, которая вызывается, когда ведомое устройство получает переданные данные от ведущего.

Пример

void setup() {
  Wire.begin(8);                //инициализируем I2C шину с адресов #8
  Wire.onReceive(receiveEvent); // регистрируем событие обработчика
  Serial.begin(9600);           // инициализируем UART
}
void receiveEvent (int howmany){
  while (1 < Wire.available()) { // в цикле проверяем поступили ли на шину I2C данные
    char c = Wire.read();        // если да, читаем байт
       Serial.print(c);             // отправляем его на UART
  }
}    
Wire.onRequest(handler)

Функция-обработчик, которая вызывается, когда мастер запрашивает у ведомого устройства, не принимает параметров и ничего не возвращает.

Пример

void setup() {
  Wire.begin(8);                //инициализируем I2C шину с адресов #8
  Wire.onRequest(requestEvent); // регестрируем событие 
}
void loop() {
  delay(100);
}

// функция, которая выполняется всякий раз, когда мастер запрашивает данные
// эта функция регистрируется как событие
void requestEvent() {
  Wire.write("hello "); // оправляем сообщение 6 байт
  // как и ожидал мастер
}

Применение

Идентификация личности


Замок и ключ, использующие технологию 1-Wire

Каждая микросхема 1-Wire имеет уникальный номер. Это позволяет использовать устройства iButton в качестве простых идентификаторов личности, например, в системах контроля и управления доступом (СКУД). В этом качестве они успешно конкурируют с бесконтактными карточками, использующими технологию RFID.

Имеются устройства iButton с поддержкой криптографии, что позволяет создавать на их основе защищённые хранилища небольших объёмов данных или средства сильной аутентификации. Такие устройства могут конкурировать со смарт-картами в некоторых применениях.

Удалённые датчики физических величин

Устройства 1-Wire очень удобны для измерений. Не требуется отдельного питания, возможно подключить по одному проводу целую гирлянду разнообразных датчиков. Система таких датчиков легко контролируется на предмет аварий. Записи о калибровках могут храниться прямо в датчиках.

Измерение температуры — одно из самых массовых применений 1-Wire устройств. В сельском хозяйстве применяется для многоточечного контроля температуры в теплицах, ульях, элеваторах, инкубаторах, овощехранилищах. Популярны домашние метеостанции, подключаемые по этому интерфейсу.

Маркировка оборудования

Микросхемы 1-Wire популярны для маркировки и хранения параметров дополнительного оборудования к установкам. Например, медицинские и лабораторные приборы, использующие в работе множество различных сменных головок и датчиков, снабжаются микросхемой. При подключении прибор сразу распознаёт сменную головку и корректно устанавливает режим работы. Аналогично может контролироваться наработка узлов с ограниченным ресурсом.

Другие применения

Существуют решения iButton для охраны недвижимости, для систем обнаружения проникновения, другое использования. Есть также системы для доступа в менее очевидных областях безопасности. Например, iButton может быть использован для аутентификации пользователей компьютерных систем (аппаратный ключ в системах защиты информации), или в системе табельных часов.

Интерфейс 1-Wire

В этой статье я попытаюсь рассказать о потрясающей вещи – интерфейсе 1-Wire. Что в нем потрясающего? В нем данные передаются всего по одному проводу! Только вдумайтесь, куча датчиков может быть подключена к однопроводной шине.

Интерфейс One-Wire (встречается и такая нотация) был разработан компанией Dallas Semiconductor и применен в виде огромного количества устройств изготовленной данной компанией. Думаю практически все знают температурные датчики c 1-Wire интерфейсом – DS18B20.

Каждое устройство 1-Wire имеет собственный уникальный идентификатор, что обуславливает применение данных устройств в качестве устройств идентификации личности, маркировки оборудования и пр.

Как же передаются данные по однопроводной шине в обе стороны?

Данный вопрос очень удобно (и практично) рассмотреть на примере работы с датчиком температуры DS18B20.
Вот так выглядит схема его подключения:

Есть еще вариант с питанием датчика от линии данных, в таком случае вы получаете рабочий датчик температуры подключенный всего при помощи двух проводов!

Первым делом при работе с шиной 1-Wire необходимо её инициализировать, послать сигнал сброса.

Как видно из временной диаграммы (я позаимствовал её из даташита на датчик), мастер (т.е. контроллер устанавливает на шине нулевой потенциал на временя не менее 480 мкс, после чего устанавливает её в единичный потенциал.

После чего необходимо подождать 15-60мкс, чтобы датчик получил передний фронт и отправил импульс присутствия (presence pulse) длиной 60-240мкс.

Если данный импульс не получен, значит на шине нет датчиков готовых к обмену данными.

Теперь рассмотрим процедуру отправки и приема бита.

Операция чтения бита очень похожа на операцию записи. Мы также должны установить шину в низкий потенциал, по крайней мере на 1мкс.

После чего переводим ножку микроконтроллера в режим приема данных и ожидаем 14мкс. После этого можно считать состояние линии. Она будет в высоком состоянии если передается “1” и в никзом, если “0”.

Наконец мы должны подождать ещё 45мкс до окончания периода в 60мкс.

Операция отправки/приема байта производиться в цикле, путем отправки/приема бита и сдвигов операнда.

Также существует режим работы с шиной 1-Wire при помощи USART:

Такой режим намного удобнее для stm32 контроллеров. Там проблем с нехваткой USART’ов нет, да ножек хоть отбавляй.

¶ Проверка работоспособности

После перезагрузки проверяем, что у нас появилась шина:

Вывод будет выглядеть (приблизительно) так:

GPIO, Pins. Использование реле.

После прошивки и конфигруации MCU часть плат принтера или плат Arduino, STM32, Raspberry Pico сразу предоставляют доступ к своим . Единственным условим их корректного использования будет четкое указание к какому идет обращение, например, у нас есть MCU :

Обращение к его ‘Pin’ внутри конфигурационного файла будет выглядеть следующим образом:

Взаимодействие с MCU, не используемых в других частях конфигурационного файла, определяется блоком:

Для использования GPIO_1 с MCU Pico приведем его к виду:

Для последующего изменения состояния используется команда

Где – это необходимое значение.

Более детально в .

Шина SPI

SPI (Serial Peripheral Interface) – четырех проводной интерфейс, применяется в схемах с микроконтроллерами. Обеспечивает синхронный дуплексный обмен данными. SPI работает по принципу сдвигового регистра. Регистры находятся в разных устройствах. Одно из них является MASTER. Это может быть микроконтроллер с тактовым генератором имеющий определенную программу.

Другим устройством может быть:

  • память
  • датчик температуры
  • принтер
  • др.

Для обмена информацией между мастером и устройствами используются сигналы INPUT и OUTPUT. Название шин образовалось от сокращенных слов устройств и сигналов:

  • MISO – Master Input Slave Output
  • MOSI – Master Output Slave Input

Основной сигнал в этой шине является SLK (CLOCK).

Когда микроконтроллер работает с несколькими устройствами, будут необходимы дополнительные сигналы, для выбора соответствующего устройства с которым будет происходить обмен. В этом случае потребуется сигнал выборки – SS (Slave Select). Если устройств N, то увеличивается количество выводов от MASTER. При этом сигналы поступающие от MASTERA идут параллельно. 

В таком случае при поступлении SS на одном выводе, данные передаются только с необходимого устройства выбранного мастером для обмена. Чтобы устройства не мешали работе друг друга при обмене, происходит стробирование, которое осуществляется по сигналу SS для каждого устройства.

Схема SPI шины

Преимущества шины SPI:

  • простота реализации
  • полный дуплекс – передача данных от мастера к устройству и в обратном направлении за один такт
  • низкие требования к стабильности тактовых импульсов, так как передача данных начинается по фронту SCLK

Шина SPI

Недостатки шины SPI:

отсутствие контроля. Например обрыв шин MISO или MOSI, накладывается при помощи программных средств

Примеры применения I2C в различных устройствах

Протокол I2C (Inter-Integrated Circuit) используется в множестве различных устройствах. Он предоставляет простой и эффективный способ связи между разными компонентами системы и облегчает взаимодействие между ними.

1. Датчики и устройства сбора данных

I2C широко применяется в датчиках и других устройствах для сбора и передачи данных. Например, датчики температуры, влажности, давления и освещенности могут быть подключены к микроконтроллеру или другому устройству с помощью I2C интерфейса.

Используя I2C, можно передавать данные от этих датчиков к контроллеру с минимальными затратами на провода и сигналы. Контроллер может легко получать данные от разных датчиков, что делает его более гибким и удобным для обработки сигналов и принятия решений.

2. Жидкокристаллические дисплеи (LCD)

Многие жидкокристаллические дисплеи используют I2C для связи с контроллером. Это позволяет управлять дисплеем через несколько проводов, что упрощает его подключение и интеграцию в систему.

Контроллер может отправлять команды и данные на дисплей через I2C интерфейс, и дисплей отображает информацию в соответствии с полученными данными. I2C позволяет легко управлять отображением информации на дисплее и динамически изменять его содержимое.

3. Акселерометры и гироскопы

Многие акселерометры и гироскопы, используемые в различных устройствах, таких как мобильные телефоны, планшеты и игровые консоли, подключаются с помощью I2C интерфейса.

Эти устройства предоставляют информацию о движении и ориентации устройства, которая может быть использована для управления играми, навигации в пространстве и других функций. I2C обеспечивает быструю и надежную передачу данных от акселерометров и гироскопов к контроллеру, что позволяет устройству точно отслеживать движения.

4. Аудио кодеки

Аудио кодеки, используемые в множестве устройств, от мобильных телефонов до профессиональных звуковых систем, также могут быть подключены с помощью I2C интерфейса.

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

5. Наследие оборудование

I2C также может использоваться для взаимодействия с различными устройствами, которые используют устаревшие стандарты связи, поддерживающие I2C для совместимости. Это позволяет использовать I2C для подключения к старому оборудованию и обеспечивает совместимость с существующими системами.

Например, некоторые старые принтеры, сканеры и другие периферийные устройства могут использовать I2C для связи с компьютером или другим контроллером. Это упрощает подключение и использование такого оборудования без необходимости обновления или замены существующих систем.

6. Другие устройства

I2C также применяется во многих других устройствах, таких как клавиатуры, манипуляторы, широкополосные модемы и даже коммуникационные интерфейсы между микросхемами внутри одного устройства.

Разнообразие применений I2C демонстрирует его универсальность и гибкость, что делает его одним из наиболее распространенных и широко используемых стандартов связи в современной электронике.

Принципиальная схема ЦИ

Принципиальная схема системы радиосвязи в ЦИ представлена на рисунке 2.
В связи с тем что производитель рекомендует для уменьшения потребляемого тока использовать диод в цепи питания, в переходной печатной плате установлен D1 1n5817. На рисунке 3 показана фотография исходных компонентов конструкции, выполненной на штыревых разъёмах и переходной печатной плате. Это позволяет в случае необходимости быстро проводить диагностику и ремонт системы радиосвязи.

В угловые штыревые разъёмы установлены модули USB-UART и HC11. В качестве антенны использован монтажный соединительный провод длиной 220 мм с разъёмами. Вся конструкция после пайки соединений устанавливается в кабель-канал размером 25´18´300 мм и закрепляется с помощью клеевого пистолета. На рисунке 4 показана фотография собранной схемы ЦИ в кабель-канале.
Слева расположен разъём micro-USB. Для схемы ЦИ обязательно требуется USB-UART c выводом DTR. Этот вывод используется для управления настройками модуля HC11, т.е. выбирается частотный канал и режим тестирования. 

Подводя итоги

RabbitMQ и Apache Kafka являются хорошими брокерами сообщений, однако не имеют всех функциональных возможностей шины данных класса ESB, в отличие от 1С:Шины. Фактически они являются только одним из элементов полноценной шины данных. 

Тем не менее, разработчики предоставили возможности для доработки данного ПО: формирования собственных правил, каналов, трансляторов и маршрутов. Таким образом брокеры можно доработать, выведя их на новый функциональный уровень. 

Такое решение имеет как преимущества, так и недостатки. С одной стороны, готовый инструмент — шина данных — нуждается в дополнительной настройке, с другой — доработка брокеров под себя обеспечит максимально удобный функционал для выполнения специфических задач. 

Понравилась статья? Поделиться с друзьями:
Автоэксперт
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: