Spisu treści:

IOT123 - CEGŁA BICIA SERCA I2C: 6 kroków
IOT123 - CEGŁA BICIA SERCA I2C: 6 kroków

Wideo: IOT123 - CEGŁA BICIA SERCA I2C: 6 kroków

Wideo: IOT123 - CEGŁA BICIA SERCA I2C: 6 kroków
Wideo: TANIEC ❤️ I LIKE IT 2024, Czerwiec
Anonim
IOT123 - CEGŁA Z BICIEM SERCA I2C
IOT123 - CEGŁA Z BICIEM SERCA I2C
IOT123 - CEGŁA Z BICIEM SERCA I2C
IOT123 - CEGŁA Z BICIEM SERCA I2C
IOT123 - CEGŁA Z BICIEM SERCA I2C
IOT123 - CEGŁA Z BICIEM SERCA I2C

KLOCKI IOT123 to modułowe jednostki DIY, które można łączyć z innymi KLOCKAMI IOT123, aby dodać funkcjonalność do węzła lub urządzenia do noszenia. Oparte są na calowych kwadratowych, dwustronnych płytach prototypowych z połączonymi ze sobą otworami przelotowymi.

Oczekuje się, że wiele z tych KLOCKÓW będzie znajdować się w wielu węzłach (główne MCU - ESP8266 lub ATTINY84) w witrynie. MCU nie wymaga wcześniejszej wiedzy na temat przeznaczenia czujników ani potrzeb oprogramowania. Skanuje w poszukiwaniu węzłów I2C, a następnie żąda zrzutu właściwości (danych z czujnika) od każdego urządzenia podrzędnego. Te cegiełki dostarczają 5,0 V, 3,3 V i inną linię AUX, którą można dostosować.

Klocek I2C HEARTBEAT wskazuje, czy urządzenie podrzędne ATTINY jest aktywne, a także ruch I2C i ma jedną właściwość:

STAN („ŻYWY”)

PB1 (biały) oznacza stan ATTINY.

PB3 (żółty) przełącza się z żądaniami I2C od mastera.

PB4 (pomarańczowy) przełącza się z odbiorem I2C z mastera.

Otwory przelotowe przylegające do ATTINY85 pozostały niewykorzystane, aby umożliwić programowanie pinów pogo podczas lutowania DIP8 do płytki drukowanej. Opracowywana jest kolejna abstrakcja, pakowanie CEGŁY w małe cylindry, które podłącza się do koncentratora D1M WIFI BLOCK, pompując wartości do serwera MQTT.

Krok 1: Materiały i narzędzia

Materiały i narzędzia
Materiały i narzędzia
Materiały i narzędzia
Materiały i narzędzia
Materiały i narzędzia
Materiały i narzędzia
Materiały i narzędzia
Materiały i narzędzia

Istnieje pełna lista Bill of Material and Sourcing.

  1. Papierowa płytka drukowana (7 x 7 otworów)
  2. Diody LED (czerwony, zielony, niebieski)
  3. Rezystory (3 szt. 1K)
  4. ATTINY85 20PU (1)
  5. Dwustronna płyta prototypowa 1" (1)
  6. Kolektor męski 90º (3P, 3P)
  7. Męski nagłówek (2P, 2P)
  8. Bocznik zworki (1)
  9. Przewód przyłączeniowy (~7)
  10. Lut i żelazo (1)

Krok 2: Przygotuj ATTINY85

Przygotuj ATTINY85
Przygotuj ATTINY85
Przygotuj ATTINY85
Przygotuj ATTINY85
Przygotuj ATTINY85
Przygotuj ATTINY85
Przygotuj ATTINY85
Przygotuj ATTINY85

UWAGA: Jeśli zamierzasz mieć integrację Crouton, skorzystaj z biblioteki stąd i użyj przykładu zainstalowanego "attiny_heartbeat"

Potrzebny jest AttinyCore od Boards Manager. Wypal bootloader "EEPROM Retained", "8mHZ Internal" (wszystkie konfiguracje pokazane powyżej).

Repozytorium kodu można znaleźć tutaj.

ZIP biblioteki można znaleźć tutaj.

Instrukcje dotyczące „Importowania biblioteki ZIP” znajdują się tutaj.

Po zainstalowaniu biblioteki możesz otworzyć przykład "attiny_heartbeat".

Aby wgrać oprogramowanie układowe do ATTINY85, możesz znaleźć więcej informacji w tych instrukcjach:

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-…

Najlepiej przetestować za pomocą płytki prototypowej przed kontynuowaniem.

Jeśli masz istniejące ASSIMILATE SENSORS, upewnij się, że adres urządzenia podrzędnego jest inny w kombinacji SENSOR/MCU Host, np. wszyscy aktorzy przekazujący mogą mieć ten sam adres, o ile masz tylko jednego aktora przekazującego na MCU/węźle.

Krok 3: Montaż wskaźników

Montaż wskaźników
Montaż wskaźników
Montaż wskaźników
Montaż wskaźników
Montaż wskaźników
Montaż wskaźników

Wskaźniki mają być w pełni konfigurowalne. To sygnały zdarzeń z głównego obwodu są postrzegane jako uderzenia serca. W tej kompilacji użyjemy wskaźników LED; Twoja kompilacja może korzystać z przekaźników (tak, VCC jest zepsute) lub innego wskaźnika opartego na wizualnym/sygnałowym. Wartości rezystorów będą zależeć od osobistych preferencji i tego, jak bardzo chcesz je rozjaśnić.

  1. Na górze włóż niebieską diodę LED do RED1 (+) i BLACK1 (G) i przylutuj na dole.
  2. Na dole wygnij przewód z RED1 tak, aby dotykał miedzianej podkładki na SILVER8 i wykończenia.
  3. Na dole wykończenie wyprowadzenia z BLACK1 nad lutem.
  4. Na górze włóż zieloną diodę LED do RED2 (+) i BLACK2 (G), a na dole przylutuj.
  5. Na dole wygnij przewód z RED2 tak, aby dotykał miedzianej podkładki na SILVER9 i wykończenia.
  6. Na dole wykończenie wyprowadzenia z BLACK2 nad lutem.
  7. Na górze włóż czerwoną diodę LED do RED3 (+) i BLACK3 (G), a na dole przylutuj.
  8. Na dole wygnij przewód z RED3 tak, aby dotykał miedzianej podkładki na SILVER10 i wykończenia.
  9. Na dole wykończenie wyprowadzenia z BLACK3 nad lutem.
  10. Na górze włóż rezystor 1K do otworów przelotowych SILVER1 i SILVER4.
  11. Na dole prześledź, przycinaj i lutuj od SILVER1 do BLACK1.
  12. Na górze włóż rezystor 1K w otwory przelotowe SILVER2 i SILVER4.
  13. Na dole prześledź, przyciąć i lutować od SILVER2 do BLACK2.
  14. Na górze włóż rezystor 1K w otwory przelotowe SILVER3 i SILVER4.
  15. Na dole prześledź, przycinaj i lutuj od SILVER3 do BLACK3.
  16. Na dole przylutuj przewody na SILVER4 i przycinaj na około 5mm wysuniętym.
  17. Na dole przylutuj czarny przewód do SILVER4.
  18. Od spodu wlutuj biały przewód do SILVER5, zapewniając ciągłość doprowadzenia z RED1.
  19. Na dole wlutuj żółty przewód do SILVER6, zapewniając ciągłość doprowadzenia z RED2.
  20. Na dole przylutuj pomarańczowy przewód do SILVER7, zapewniając ciągłość wyprowadzenia z RED3.

Krok 4: Montaż obwodu głównego

Montaż obwodu głównego
Montaż obwodu głównego
Montaż obwodu głównego
Montaż obwodu głównego
Montaż obwodu głównego
Montaż obwodu głównego

Montaż:

  1. Z przodu włóż komponenty ATTINY85 (1), złącza męskie 3P 90deg (2)(3), złącza męskie 3P (4)(5) i przylutuj z tyłu.
  2. Z tyłu prześledź żółty przewód od ŻÓŁTEGO1 do ŻÓŁTEGO2 i przylutuj.
  3. Z tyłu prześledź pomarańczowy przewód od ORANGE1 do ORANGE2 i przylutuj.
  4. Z tyłu prześledź niebieski przewód od BLUE1 do BLUE2 i przylutuj.
  5. Z tyłu prześledź zielony przewód od ZIELONEGO1 do ZIELONEGO2 i przylutuj.
  6. Z tyłu prześledź biały przewód od BIAŁY1 do BIAŁY2 i przylutuj.
  7. Z tyłu prześledź czarny przewód od BLACK1 do BLACK2 i przylutuj.
  8. Z tyłu prześledź czarny przewód od BLACK3 do BLACK4 i przylutuj.
  9. Z tyłu prześledź czerwony przewód od RED1 do RED2 i przylutuj.
  10. Z tyłu prześledź goły przewód od RED3 do RED4 i przylutuj.
  11. Z tyłu prześledź goły drut od SILVER1 do SILVER2 i lut.
  12. Dodaj zworkę na linii 5V lub 3V3.

W przypadku korzystania z powyższych wskaźników (patrz schemat pinów):

  1. Z tyłu przylutuj biały przewód do PB1.
  2. Z tyłu przylutuj żółty przewód do PB3.
  3. Z tyłu przylutuj pomarańczowy przewód do PB4.
  4. Z tyłu czarny przewód przylutuj do GND.

Krok 5: Testowanie

Testowanie
Testowanie
Testowanie
Testowanie
Testowanie
Testowanie
Testowanie
Testowanie

Oczekuje się, że wiele z tych KLOCKÓW będzie znajdować się na wielu węzłach (MCU - ESP8266 lub ATTINY84) w środowisku. To jest test jednostkowy: wysyła polecenia I2C z UNO do ATTINY, który przełącza diodę LED odbioru. Dioda LED ATTINY ALIVE pozostaje włączona.

Wcześniej zbudowaliśmy I2C SHIELD dla Arduino.

Jeśli zamiast tego chcesz to zrobić:

  1. Podłącz 5.0V na UNO do VCC na BRICK.
  2. Podłącz GND na UNO do GND na BRICK.
  3. Podłącz A5 na UNO do SCL na BRICK.
  4. Podłącz A4 na UNO do SDA na BRICK.
  5. Podłącz rezystor podciągający 4K7 z SDA do VCC.
  6. Podłącz rezystor podciągający 4K7 z SCL do VCC.

Przeprowadzenie testu

  1. Podłącz UNO do swojego Dev PC za pomocą USB.
  2. Prześlij kod do UNO.
  3. Otwórz konsolę Arduino.
  4. Wybierz 9600 bodów (zrestartuj UNO i ponownie otwórz konsolę, jeśli musisz).
  5. Adres urządzenia podrzędnego zostanie wydrukowany na konsoli.
  6. Gdy, wpisz w polu wysyłania 2 1 (czyli 16 2 1), a dioda odbioru zaświeci się.
  7. Kiedy, wpisz w polu wysyłania 2 0 (czyli 16 2 0), a dioda odbioru zgaśnie.

Polecenia adhoc I2C BRICK dla urządzeń podrzędnych z mastera UNO

#włączać
stały bajt _liczba_znaków = 32;
char _otrzymane_znaki[_liczba_znaków]; // tablica do przechowywania otrzymanych danych
wartość logiczna _ma_nowe_dane = fałsz;
voidsetup() {
Serial.początek(9600);
Serial.println();
Serial.println("ASYMILACJA AKTORA IOT/EDYTOR CZUJNIKA EEPROM");
Serial.println("zapewnij zaznaczenie nowej linii w oknie konsoli");
Serial.println();
Serial.println("ADRES 1 POTWIERDŹ POTWIERDZENIE METADANYCH NIE DOTYCZY (DLA M2M)");
Serial.println("POLECENIE AKTORA DLA ADRESU 2");
Serial.println();
Serial.println("ADRESY W BUS:");
scan_i2c_addresses();
Serial.println();
Serial.println("");
}
voidscan_i2c_addresses(){
int liczba_urządzeń = 0;
for (adres bajtu = 8; adres < 127; adres++)
{
Wire.beginTransmisja(adres);
błąd const byte = Wire.endTransmission();
jeśli (błąd == 0)
{
Serial.println(adres);
}
}
}
voidloop() {
recv_with_end_marker();
wyślij_do_i2c();
}
voidrecv_with_end_marker() {
bajt statyczny ndx = 0;
char end_marker = '\n';
char rc;
while (Serial.available() >0 && _has_new_data == false) {
rc = Serial.odczyt();
if (rc != end_marker) {
_otrzymane_znaki[ndx] = rc;
ndx++;
if (ndx >= _liczba_znaków) {
ndx = _liczba_znaków - 1;
}
}
w przeciwnym razie {
_otrzymane_znaki[ndx] = '\0'; // zakończ ciąg
ndx = 0;
_ma_nowe_dane = prawda;
}
}
}
voidsend_to_i2c() {
char param_buf[16];
const String odebrany_string = String(_otrzymane_znaki);
jeśli (_has_new_data == prawda) {
int idx1 = odebrany_ciąg.indexOf('');
Adres ciągu = odebrany_ciąg.substring(0, idx1);
int adres_int = adres.toInt();
if (adres_int < 8 || adres_int >127){
Serial.println("NIEPRAWIDŁOWE WPROWADZENIE ADRESU:");
Serial.println(adres);
powrót;
}
int idx2 = odebrany_ciąg.indexOf('', idx1+1);
Kod ciągu;
jeśli (idx2 == -1){
kod = odebrany_ciąg.podciąg(idx1+1);
}w przeciwnym razie{
kod = odebrany_ciąg.podciąg(idx1+1, idx2+1);
}
int kod_int = kod.toInt();
if (kod_int < 0 || code_int >5){
Serial.println("WPROWADZONY NIEPRAWIDŁOWY KOD:");
Serial.println(kod);
powrót;
}
bool has_parameter = idx2 > -1;
parametr ciągu;
jeśli (ma_parametr){
parametr = odebrany_ciąg.substring(idx2 + 1, idx2 + 17); // maks. 16 znaków
if (parametr.długość() < 1){
Serial.println("MIN. DŁUGOŚĆ PARTAMENTU 1");
_ma_nowe_dane = fałsz;
powrót;
}
}w przeciwnym razie{
jeśli (kod_int >1){
Serial.println("WYMAGANY PARAMETR!");
_ma_nowe_dane = fałsz;
powrót;
}
}
Serial.println();
Serial.print("input orig = ");
Serial.println(otrzymany_ciąg);
Serial.print("adres = ");
Serial.println(adres);
Serial.print("kod = ");
Serial.println(kod);
Serial.print("parametr = ");
Serial.println(parametr);
// WYŚLIJ PRZEZ I2C
Wire.beginTransmission(adres_int);
Wire.write(kod_int);
jeśli (ma_parametr){
parametr.przycinanie();
strcpy(param_buf, parametr.c_str());
Wire.write(param_buf);
}
Wire.endTransmission();
Serial.println();
Serial.println("WYSŁANE PRZEZ I2C!");
Serial.println();
Serial.println("");
_ma_nowe_dane = fałsz;
}
}

zobacz rawuno_i2c_command_input.ino hostowane z ❤ przez GitHub

Krok 6: Kolejne kroki

Następne kroki
Następne kroki
Następne kroki
Następne kroki

Kontynuacja ASIMILATE ACTOR: HEARTBEAT, która używa tej cegły, ma automatyczną konfigurację dla Croutona za pomocą metadanych już zainstalowanych w ATTINY85 tutaj. Pakiet JSON wysłany do Croutona jest wysyłany za pośrednictwem najnowszego oprogramowania układowego dla ICOS10. Możesz zrobić dowód koncepcji na zwykłym ESP8266, jeśli kompilacja to na razie za dużo.

Szkic UNO używany w testowaniu ma funkcję zapisywania nowego adresu urządzenia podrzędnego w pamięci EEPROM na ATTINY85, jeśli wystąpi konflikt na docelowej magistrali I2C.

Zalecana: