Оглавление:
Видео: IOT123 - I2C HEARTBEAT BRICK: 6 шагов
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
КИРПИЧЫ IOT123 - это модульные блоки DIY, которые можно смешивать с другими КИРПИЧами IOT123, чтобы добавить функциональность узлу или носимому устройству. В их основе лежат двухсторонние прототипы квадратного сечения дюйма с соединенными между собой сквозными отверстиями.
Предполагается, что некоторое количество этих КИРПИЧОВ будет на нескольких узлах (главные MCU - ESP8266 или ATTINY84) на сайте. MCU не нуждается в предварительных знаниях о назначении датчиков или программных потребностях. Он сканирует узлы I2C, а затем запрашивает дамп свойств (данные датчика) от каждого ведомого устройства. Эти КИРПИЧЫ обеспечивают питание 5,0 В, 3,3 В и другую линию AUX, которую можно настроить.
Этот I2C HEARTBEAT BRICK указывает, жив ли ведомое устройство ATTINY, а также трафик I2C и имеет одно свойство:
СТАТУС («ЖИВУЮ»)
PB1 (белый) указывает на здоровье ATTINY.
PB3 (желтый) переключается с запросами I2C от мастера.
PB4 (оранжевый) переключается с приемом I2C от мастера.
Сквозные отверстия, примыкающие к ATTINY85, остались неиспользованными, чтобы можно было использовать программатор pogo pin, в то время как DIP8 припаян к печатной плате. Еще одна абстракция - упаковка КИРПИЧОВ в маленькие цилиндры, которые подключаются к концентратору D1M WIFI BLOCK и перекачивают значения на сервер MQTT.
Шаг 1. Материалы и инструменты
Есть полный список материалов и источников.
- Бумажная печатная плата (7 x 7 отверстий)
- Светодиоды (красный, зеленый, синий)
- Резисторы (3 шт. По 1 кОм)
- ATTINY85 20ПУ (1)
- 1 "двусторонняя макетная плата (1)
- Мужской заголовок 90º (3P, 3P)
- Мужской заголовок (2P, 2P)
- Перемычка шунта (1)
- Монтажный провод (~ 7)
- Припой и железо (1)
Шаг 2: Подготовьте ATTINY85
ПРИМЕЧАНИЕ. Если вы собираетесь интегрировать Crouton, воспользуйтесь библиотекой отсюда и используйте установленный пример "attiny_heartbeat"
AttinyCore от Boards Manager не требуется. Записать загрузчик «EEPROM Retained», «8mHZ Internal» (все конфигурации показаны выше).
Репозиторий кода можно найти здесь.
ZIP-архив библиотеки можно найти здесь.
Инструкции по «Импорту библиотеки ZIP» здесь.
После установки библиотеки вы можете открыть пример attiny_heartbeat.
Чтобы загрузить прошивку в ATTINY85, вы можете найти более подробную информацию в этих инструкциях:
www.instructables.com/id/Programming-the-….
www.instructables.com/id/How-to-Program-A…
www.instructables.com/id/Programming-the-…
www.instructables.com/id/How-to-Program-A…
www.instructables.com/id/Programming-the-…
Лучше всего протестировать через макетную плату, прежде чем продолжить.
Если у вас есть ДАТЧИКИ ASSIMILATE, убедитесь, что адрес ведомого устройства отличается в комбинации хоста ДАТЧИК / MCU, например. все субъекты Relay могут иметь один и тот же адрес, если у вас есть только один субъект Relay на MCU / узле.
Шаг 3: Сборка индикаторов
Индикаторы должны быть полностью настраиваемыми. Это сигналы событий от главной цепи, которые отображаются как Heartbeats. Для этой сборки мы будем использовать светодиодные индикаторы; ваша сборка может использовать реле (да, VCC сломан) или другой визуальный / сигнальный индикатор. Номиналы резисторов будут зависеть от личных предпочтений от того, насколько яркими они вам нужны.
- Сверху вставьте синий светодиод в RED1 (+) и BLACK1 (G), а снизу припаяйте.
- Внизу согните провод от RED1 так, чтобы он касался медной площадки на SILVER8, и подрежьте.
- Внизу обрежьте вывод от ЧЕРНОГО 1 над припоем.
- Сверху вставьте зеленый светодиод в RED2 (+) и BLACK2 (G), а снизу припаяйте.
- Внизу согните провод от RED2 так, чтобы он касался медной площадки на SILVER9, и обрежьте.
- Внизу обрезать вывод от ЧЕРНОГО 2 над припоем.
- Сверху вставьте красный светодиод в RED3 (+) и BLACK3 (G), а снизу припаяйте.
- Внизу согните провод от RED3 так, чтобы он касался медной площадки на SILVER10, и подрежьте.
- Внизу обрезать вывод от ЧЕРНОГО 3 над припоем.
- Сверху вставьте резистор 1 кОм в сквозные отверстия SILVER1 и SILVER4.
- Внизу проследите, обрежьте и припаяйте вывод СЕРЕБРЯНЫЙ1 на ЧЕРНЫЙ1.
- Сверху вставьте резистор 1 кОм в сквозные отверстия SILVER2 и SILVER4.
- Внизу проследите, обрежьте и припаяйте вывод СЕРЕБРЯНЫЙ2 на ЧЕРНЫЙ2.
- Сверху вставьте резистор 1 кОм в сквозные отверстия SILVER3 и SILVER4.
- Внизу проследите, обрежьте и припаяйте вывод от SILVER3 к BLACK3.
- Внизу припаяйте провода к SILVER4 и обрежьте их примерно на 5 мм.
- Снизу припаяйте черный провод к SILVER4.
- Внизу припаяйте белый провод к SILVER5, чтобы обеспечить непрерывность вывода от RED1.
- Внизу припаяйте желтый провод к СЕРЕБРЯНОМУ 6, обеспечивая непрерывность от КРАСНОГО2.
- Внизу припаяйте оранжевый провод к SILVER7, обеспечив непрерывность вывода от RED3.
Шаг 4: Сборка главной цепи
Сборка:
- На передней панели вставьте компоненты ATTINY85 (1), 3-полюсные 90-градусные вилочные разъемы (2) (3), 3-полюсные вилочные разъемы (4) (5) и припаяйте сзади.
- Сзади проследите желтый провод от ЖЕЛТОГО1 до ЖЕЛТОГО2 и припаяйте.
- Сзади проследите оранжевый провод от ORANGE1 до ORANGE2 и припаяйте.
- Сзади проследите синий провод от СИНЕГО 1 до СИНЕГО2 и припаяйте.
- Сзади проследите зеленый провод от GREEN1 до GREEN2 и припаяйте.
- Сзади проследите белый провод от БЕЛОГО1 до БЕЛОГО2 и припаяйте.
- Сзади проследите черный провод от ЧЕРНОГО1 до ЧЕРНОГО2 и припаяйте.
- Сзади проследите черный провод от ЧЕРНОГО3 до ЧЕРНОГО4 и припаяйте.
- Сзади проследите красный провод от RED1 до RED2 и припаяйте.
- Сзади проследите оголенный провод от RED3 до RED4 и припаяйте.
- Сзади проследите оголенный провод от SILVER1 до SILVER2 и припаяйте.
- Добавьте перемычку на линию 5V или 3V3.
При использовании индикаторов выше (см. Распиновку):
- Сзади припаяйте белый провод к PB1.
- Сзади припаяйте желтый провод к PB3.
- Сзади припаяйте оранжевый провод к PB4.
- Сзади припаяйте черный провод к GND.
Шаг 5: Тестирование
Предполагается, что некоторые из этих КИРПИЧОВ будут находиться на нескольких узлах (MCU - ESP8266 или ATTINY84) в среде. Это модульный тест: отправляет команды I2C от UNO на ATTINY, который переключает индикатор приема. Светодиод ATTINY ALIVE горит постоянно.
Ранее мы создали I2C SHIELD для Arduino.
Если вы хотите вместо этого сделать макет:
- Подключите 5,0 В на UNO к VCC на BRICK.
- Подключите GND на UNO к GND на КИРПИЧЕ.
- Подключите A5 на UNO к SCL на BRICK.
- Подключите A4 на UNO к SDA на BRICK.
- Подключите подтягивающий резистор 4K7 от SDA к VCC.
- Подключите подтягивающий резистор 4K7 от SCL к VCC.
Запускаем тест
- Подключите UNO к компьютеру Dev через USB.
- Загрузите код в UNO.
- Откройте консоль Arduino.
- Выберите 9600 бод (перезапустите UNO и повторно откройте консоль, если необходимо).
- Адрес ведомого устройства будет напечатан на консоли.
- Когда введите в поле отправки 2 1 (так 16 2 1), и загорится индикатор получения.
- Когда введите в поле отправки 2 0 (так 16 2 0), и индикатор получения погаснет.
Специальные команды I2C BRICK для ведомых устройств от ведущего устройства UNO
#включают |
константный байт _num_chars = 32; |
char _received_chars [_num_chars]; // массив для хранения полученных данных |
логическое _has_new_data = false; |
voidsetup () { |
Serial.begin (9600); |
Serial.println (); |
Serial.println ("СОБИРАЙТЕ АКТЕР IOT / РЕДАКТОР EEPROM ДАТЧИКА"); |
Serial.println ("убедитесь, что в окне консоли выбрана новая строка"); |
Serial.println (); |
Serial.println ("АДРЕС 1 ПОДТВЕРДИТЬ ПОЛУЧЕНИЕ МЕТАДАННЫХ НЕТ (ДЛЯ M2M)"); |
Serial.println («АДРЕС 2 АКТЕРСКОЙ КОМАНДЫ»); |
Serial.println (); |
Serial.println («АДРЕСА НА АВТОБУСЕ:»); |
scan_i2c_addresses (); |
Serial.println (); |
Serial.println (""); |
} |
voidscan_i2c_addresses () { |
int device_count = 0; |
для (адрес байта = 8; адрес <127; адрес ++) |
{ |
Wire.beginTransmission (адрес); |
const byte error = Wire.endTransmission (); |
если (ошибка == 0) |
{ |
Serial.println (адрес); |
} |
} |
} |
voidloop () { |
recv_with_end_marker (); |
send_to_i2c (); |
} |
voidrecv_with_end_marker () { |
статический байт ndx = 0; |
char end_marker = '\ n'; |
char rc; |
while (Serial.available ()> 0 && _has_new_data == false) { |
rc = Serial.read (); |
if (rc! = end_marker) { |
_received_chars [ndx] = RC; |
ndx ++; |
if (ndx> = _num_chars) { |
ndx = _num_chars - 1; |
} |
} |
еще { |
_received_chars [ndx] = '\ 0'; // завершаем строку |
ndx = 0; |
_has_new_data = true; |
} |
} |
} |
voidsend_to_i2c () { |
char param_buf [16]; |
const String Received_string = String (_received_chars); |
if (_has_new_data == true) { |
int idx1 = полученная_строка.indexOf (''); |
Адрес строки = полученная_строка.substring (0, idx1); |
int address_int = адрес.toInt (); |
if (address_int <8 || address_int> 127) { |
Serial.println ("НЕВЕРНЫЙ ВХОД АДРЕСА:"); |
Serial.println (адрес); |
возвращение; |
} |
int idx2 = полученная_строка.indexOf ('', idx1 + 1); |
Строковый код; |
if (idx2 == -1) { |
код = полученная_строка.substring (idx1 + 1); |
}еще{ |
код = полученная_строка.substring (idx1 + 1, idx2 + 1); |
} |
int code_int = code.toInt (); |
if (code_int <0 || code_int> 5) { |
Serial.println ("Неверный ввод кода:"); |
Serial.println (код); |
возвращение; |
} |
bool has_parameter = idx2> -1; |
Строковый параметр; |
if (has_parameter) { |
параметр = полученная_строка.substring (idx2 + 1, idx2 + 17); // не более 16 символов |
if (parameter.length () <1) { |
Serial.println («МИН. ДЛИНА ПАРТАМЕТРА 1»); |
_has_new_data = false; |
возвращение; |
} |
}еще{ |
if (code_int> 1) { |
Serial.println («ТРЕБУЕТСЯ ПАРАМЕТР!»); |
_has_new_data = false; |
возвращение; |
} |
} |
Serial.println (); |
Serial.print ("input orig ="); |
Serial.println (полученная_строка); |
Serial.print ("адрес ="); |
Serial.println (адрес); |
Serial.print ("код ="); |
Serial.println (код); |
Serial.print ("параметр ="); |
Serial.println (параметр); |
// ОТПРАВИТЬ ЧЕРЕЗ I2C |
Wire.beginTransmission (адрес_инт); |
Wire.write (code_int); |
if (has_parameter) { |
параметр.trim (); |
strcpy (param_buf, параметр.c_str ()); |
Wire.write (param_buf); |
} |
Wire.endTransmission (); |
Serial.println (); |
Serial.println («ОТПРАВЛЕН ЧЕРЕЗ I2C!»); |
Serial.println (); |
Serial.println (""); |
_has_new_data = false; |
} |
} |
просмотреть rawuno_i2c_command_input.ino, размещенный с ❤ на GitHub
Шаг 6. Дальнейшие действия
Последующий ASSIMILATE ACTOR: HEARTBEAT, который использует этот кирпич, имеет автоматическую настройку для Crouton через метаданные, уже установленные в ATTINY85 здесь. Пакет JSON, отправленный в Crouton, отправляется через последнюю версию прошивки для ICOS10. Вы можете сделать Proof-of-Concept на обычном ESP8266, если сборка пока слишком велика.
Скетч UNO, используемый при тестировании, имеет функцию для сохранения нового адреса подчиненного устройства в EEPROM на ATTINY85, если у вас есть конфликт на целевой шине I2C.