Spisu treści:

IOT123 - I2C KY019 CEGŁA: 5 kroków
IOT123 - I2C KY019 CEGŁA: 5 kroków

Wideo: IOT123 - I2C KY019 CEGŁA: 5 kroków

Wideo: IOT123 - I2C KY019 CEGŁA: 5 kroków
Wideo: Arduino keypad door lock with i2c LCD -Test1 2024, Listopad
Anonim
IOT123 - I2C KY019 CEGŁA
IOT123 - I2C KY019 CEGŁA
IOT123 - I2C KY019 CEGŁA
IOT123 - I2C KY019 CEGŁA

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ć.

Ten I2C KY019 BRICK jest pierwszym z AKTORÓW i ma jedną właściwość odczytu/zapisu:

Przełącznik (prawda/fałsz)

Klocki czujników typu Keyes zostaną pobrane jako pierwsze, ponieważ zawierają witaminy (potrzebne dodatkowe składniki) i są stosunkowo tanie (kupiłem 37 za 10AUD). Inne płytki/obwody zostaną wprowadzone do I2C BRICKS.

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

Istnieje pełna lista Bill of Material and Sourcing.

  1. KY-019 Przekaźnik (1)
  2. ATTINY85 20PU (1)
  3. Dwustronna płyta prototypowa 1" (1)
  4. Kolektor męski 90º (3P, 3P)
  5. Przewód przyłączeniowy (~7)
  6. Lut i żelazo (1)

Krok 2: 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_ky019".

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_ky019".

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

www.instructables.com/id/Programming-the-A…

www.instructables.com/id/How-to-Program-AT…

www.instructables.com/id/How-to-program-th…

www.instructables.com/id/Programming-the-A…

www.instructables.com/id/Programming-an-At…

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

Jeśli masz istniejące ASSIMILATE SENSORS, upewnij się, że adres slave jest inny w kombinacji hosta CZUJNIK/MCU, tj. wszyscy aktorzy przekaźnika mogą mieć ten sam adres, o ile masz tylko jednego aktora przekaźnika na MCU/węźle.

Krok 3: Złóż obwód

Złóż obwód
Złóż obwód
Złóż obwód
Złóż obwód
Złóż obwód
Złóż obwód
Złóż obwód
Złóż obwód
  1. Z przodu włóż komponenty ATTINY85 (1), męskie złącza 3P 90deg (2)(3) 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ź niebieski przewód od BLUE1 do BLUE2 i przylutuj.
  4. Z tyłu prześledź zielony przewód od ZIELONEGO1 do ZIELONEGO2 i przylutuj.
  5. Z tyłu prześledź czarny przewód od BLACK1 do BLACK2 i przylutuj.
  6. Z tyłu prześledź czarny przewód od BLACK3 do BLACK4 i przylutuj.
  7. Z tyłu prześledź czerwony przewód od RED1 do RED2 i przylutuj.
  8. Z tyłu prześledź czerwony przewód od RED3 do RED4 i przylutuj.

Przekaźnik można teraz podłączyć bezpośrednio za pomocą swoich pinów do płytki drukowanej lub za pomocą przewodów do punktów pokazanych w umowie pinów.

Krok 4: 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 otwiera lub zamyka przekaźnik.

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. Wybierz 9600 bodów (zrestartuj UNO i ponownie otwórz konsolę, jeśli musisz).
  4. Adres urządzenia podrzędnego zostanie wydrukowany na konsoli.
  5. Kiedy, wpisz w polu wysyłania 2 1 (czyli 12 2 1), a przekaźnik się włączy.
  6. Gdy, wpisz w polu wysyłania 2 0 (czyli 12 2 0), a przekaźnik się wyłączy.

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 5: Kolejne kroki

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

Kontynuacja ASIMILATE ACTOR: KY019, 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.

Dodano kilka schematów, ale są różne sposoby okablowania obwodu odpływowego w zależności od tego, co chcesz osiągnąć, więc zostawię to dla Ciebie:)

Zalecana: