Innehållsförteckning:

IOT123 - I2C HEARTBEAT BRICK: 6 steg
IOT123 - I2C HEARTBEAT BRICK: 6 steg

Video: IOT123 - I2C HEARTBEAT BRICK: 6 steg

Video: IOT123 - I2C HEARTBEAT BRICK: 6 steg
Video: Zaful Bikini HAUL 2018 | TRY ON | Valerie pac 2024, November
Anonim
IOT123 - I2C HEARTBEAT TEGL
IOT123 - I2C HEARTBEAT TEGL
IOT123 - I2C HEARTBEAT TEGL
IOT123 - I2C HEARTBEAT TEGL
IOT123 - I2C HEARTBEAT TEGL
IOT123 - I2C HEARTBEAT TEGL

IOT123 BRICKS är DIY modulära enheter som kan mosas ihop med andra IOT123 BRICKS, för att lägga till funktionalitet till en nod eller bärbar. De är baserade på tums fyrkantiga, dubbelsidiga protoboards med sammankopplade genomgående hål.

Ett antal av dessa BRICKS förväntas finnas på flera noder (Master MCU: er - ESP8266 eller ATTINY84) på en webbplats. MCU behöver ingen förkunskap om sensorernas syfte eller programvarubehov. Den söker efter I2C -noder och begär sedan en egendomsdump (sensordata) från varje slav. Dessa BRICK levererar 5.0V, 3.3V och en annan AUX -linje som kan anpassas.

Denna I2C HEARTBEAT BRICK anger om ATTINY -slaven lever, även I2C -trafiken, och har en egenskap:

STATUS ("ALIVE")

PB1 (vit) indikerar ATTINY hälsa.

PB3 (gul) växlar med I2C -förfrågningar från mastern.

PB4 (orange) växlar med I2C -mottagning från mastern.

De genomgående hålen intill ATTINY85 har lämnats oanvända för att möjliggöra en pogo-stiftprogrammerare medan DIP8 löds till kretskortet. En ytterligare abstraktion, förpackning av BRICKS i små cylindrar som ansluts till ett D1M WIFI BLOCK -nav, som pumpar värdena till en MQTT -server, utvecklas.

Steg 1: Material och verktyg

Material och verktyg
Material och verktyg
Material och verktyg
Material och verktyg
Material och verktyg
Material och verktyg
Material och verktyg
Material och verktyg

Det finns en fullständig lista över material och inköpslista.

  1. Papperskort (7 x 7 hål)
  2. Lysdioder (röd, grön, blå)
  3. Motstånd (3 av 1K)
  4. ATTINY85 20PU (1)
  5. 1 "dubbelsidig protoboard (1)
  6. Manlig header 90º (3P, 3P)
  7. Manlig huvud (2P, 2P)
  8. Tröja Shunt (1)
  9. Anslutningstråd (~ 7)
  10. Löd och järn (1)

Steg 2: Förbered ATTINY85

Förbered ATTINY85
Förbered ATTINY85
Förbered ATTINY85
Förbered ATTINY85
Förbered ATTINY85
Förbered ATTINY85
Förbered ATTINY85
Förbered ATTINY85

OBS: Om du tänker ha Crouton -integration, använd biblioteket härifrån och använd exemplet installerat "attiny_heartbeat"

AttinyCore från styrelsechefen behövs. Bränn bootloader "EEPROM Behållen", "8mHZ Internal" (all konfiguration visas ovan).

Kodförvaret hittar du här.

En ZIP av biblioteket hittar du här.

Instruktioner för "Importera ett ZIP -bibliotek" här.

När biblioteket är installerat kan du öppna exemplet "attiny_heartbeat".

För att ladda upp firmware till ATTINY85 kan du hitta mer information i dessa instruktioner:

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

Bäst att testa via brödbräda innan du fortsätter.

Om du har befintliga ASSIMILATE SENSORS, se till att slavadressen är annorlunda på en SENSOR/MCU -värdkombination t.ex. alla reläaktörer kan ha samma adress så länge du bara har en reläaktör på en MCU/nod.

Steg 3: Montering av indikatorer

Montering av indikatorer
Montering av indikatorer
Montering av indikatorer
Montering av indikatorer
Montering av indikatorer
Montering av indikatorer

Indikatorerna är avsedda att vara helt anpassningsbara. Det är händelsessignalerna från huvudkretsen som ses som hjärtslag. För denna konstruktion kommer vi att använda LED -indikatorer; din byggnad kan använda reläer (ja VCC är utbruten) eller en annan visuell/signalbaserad indikator. Motståndsvärdena beror på personliga preferenser på hur ljust du vill ha dem.

  1. På toppen sätter du in en blå lysdiod i RÖD1 (+) och SVART1 (G) och lödning på botten.
  2. På botten, böj ledningen från RED1 så att den vidrör kopparkudden på SILVER8 och trimma.
  3. På undersidan, trim ledning från BLACK1 ovanför lödet.
  4. På toppen sätter du in en grön lysdiod i RÖD2 (+) och SVART2 (G) och lödning på botten.
  5. På botten, böj ledningen från RED2 så att den vidrör kopparkudden på SILVER9 och trimma.
  6. På undersidan, trim ledning från BLACK2 ovanför lödet.
  7. På toppen sätter du in en röd lysdiod i RÖD3 (+) och SVART3 (G) och lödning på botten.
  8. På botten, böj ledningen från RED3 så att den vidrör kopparkudden på SILVER10 och trimma.
  9. På undersidan, trimledning från BLACK3 ovanför lödet.
  10. På toppen sätter du in ett 1K-motstånd i genomgående hål SILVER1 och SILVER4.
  11. På botten, spår, trim och lödkabel från SILVER1 på SVART1.
  12. På toppen sätter du in ett 1K-motstånd i genomgående hål SILVER2 och SILVER4.
  13. På botten, spår, trim och lödkabel från SILVER2 på BLACK2.
  14. På toppen sätter du in ett 1K-motstånd i genomgående hål SILVER3 och SILVER4.
  15. På botten, spår, trim och lödningsledning från SILVER3 på BLACK3.
  16. På botten, lödtrådar på SILVER4 och trimma med cirka 5 mm förlängning.
  17. På botten, löd en svart tråd på SILVER4.
  18. På botten, löd en vit tråd i SILVER5, vilket säkerställer kontinuitet för att leda från RED1.
  19. På botten, löd en gul tråd i SILVER6, vilket säkerställer kontinuitet för att leda från RED2.
  20. På botten, löd en orange tråd i SILVER7, vilket säkerställer kontinuitet för att leda från RED3.

Steg 4: Montering av huvudkretsen

Montering av huvudkretsen
Montering av huvudkretsen
Montering av huvudkretsen
Montering av huvudkretsen
Montering av huvudkretsen
Montering av huvudkretsen

Hopsättning:

  1. På framsidan, sätt in komponenterna ATTINY85 (1), 3P 90deg hanrubriker (2) (3), 3P hanrubriker (4) (5) och löd av på baksidan.
  2. På baksidan, spåra en gul tråd från GUL1 till GUL 2 och löd.
  3. På baksidan, spåra en orange tråd från ORANGE1 till ORANGE2 och löd.
  4. På baksidan, spåra en blå tråd från BLUE1 till BLUE2 och löd.
  5. På baksidan, spåra en grön tråd från GREEN1 till GREEN2 och löd.
  6. På baksidan, spåra en vit tråd från WHITE1 till WHITE2 och löd.
  7. På baksidan, spåra en svart tråd från BLACK1 till BLACK2 och löd.
  8. På baksidan, spåra en svart tråd från BLACK3 till BLACK4 och löd.
  9. På baksidan, spåra en röd tråd från RED1 till RED2 och löd.
  10. På baksidan, spåra en bar tråd från RED3 till RED4 och löd.
  11. På baksidan, spåra en bar tråd från SILVER1 till SILVER2 och löd.
  12. Lägg till en bygel på 5V eller 3V3 linjen.

Om du använder indikatorerna ovan (se pinout -diagrammet):

  1. På baksidan, löd den vita tråden i PB1.
  2. På baksidan, löd den gula tråden i PB3.
  3. På baksidan, löd den orangea tråden i PB4.
  4. På baksidan, löd den svarta tråden i GND.

Steg 5: Testning

Testning
Testning
Testning
Testning
Testning
Testning
Testning
Testning

Ett antal av dessa BRICKS förväntas finnas på flera noder (MCU: er - ESP8266 eller ATTINY84) i en miljö. Detta är ett enhetstest: skickar I2C -kommandon från UNO till ATTINY som växlar mottagningslampan. ATTINY ALIVE -lampan lyser.

Vi har tidigare byggt ett I2C SHIELD för Arduino.

Om du vill panera det istället:

  1. Anslut 5.0V på UNO till en VCC på BRICK.
  2. Anslut GND på UNO till GND på BRICK.
  3. Anslut A5 på UNO till SCL på BRICK.
  4. Anslut A4 på UNO till SDA på BRICK.
  5. Anslut ett upptagningsmotstånd 4K7 från SDA till VCC.
  6. Anslut ett 4K7 uppdragningsmotstånd från SCL till VCC.

Kör testet

  1. Anslut din UNO till din Dev PC med USB.
  2. Ladda upp koden till UNO.
  3. Öppna Arduino -konsolen.
  4. Välj 9600 baud (starta om UNO och öppna konsolen igen om du måste).
  5. Slavens adress skrivs ut till konsolen.
  6. När, skriv in i sändningsrutan 2 1 (alltså 16 2 1) och mottagningslampan tänds.
  7. När, skriv in i sändningsrutan 2 0 (alltså 16 2 0) och mottagningslampan släcks.

I2C BRICK adhoc -kommandon för slavar från UNO master

#omfatta
const byte _num_chars = 32;
char _received_chars [_num_chars]; // en array för att lagra mottagen data
booleska _has_new_data = false;
voidsetup () {
Serial.begin (9600);
Serial.println ();
Serial.println ("ASSIMILATE IOT ACTOR/SENSOR EEPROM EDITOR");
Serial.println ("se till att ny rad har valts i konsolfönstret");
Serial.println ();
Serial.println ("ADRESS 1 CONFIRM METADATA RECEIPT N/A (FOR M2M)");
Serial.println ("ADRESS 2 ACTOR COMMAND");
Serial.println ();
Serial.println ("ADRESSES ON BUS:");
scan_i2c_addresses ();
Serial.println ();
Serial.println ("");
}
voidscan_i2c_addresses () {
int device_count = 0;
för (byte -adress = 8; adress <127; adress ++)
{
Wire.beginTransmission (adress);
const byte error = Wire.endTransmission ();
om (fel == 0)
{
Serial.println (adress);
}
}
}
voidloop () {
recv_with_end_marker ();
send_to_i2c ();
}
voidrecv_with_end_marker () {
statisk byte ndx = 0;
char end_marker = '\ n';
röding;
medan (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;
}
}
annat {
_received_chars [ndx] = '\ 0'; // avsluta strängen
ndx = 0;
_has_new_data = true;
}
}
}
voidsend_to_i2c () {
char param_buf [16];
const String received_string = String (_received_chars);
om (_has_new_data == true) {
int idx1 = received_string.indexOf ('');
String address = received_string.substring (0, idx1);
int address_int = address.toInt ();
if (address_int <8 || address_int> 127) {
Serial.println ("OGILTIG ADRESSINGÅNG:");
Serial.println (adress);
lämna tillbaka;
}
int idx2 = received_string.indexOf ('', idx1+1);
Strängkod;
om (idx2 == -1) {
kod = mottagen_sträng.substräng (idx1+1);
}annan{
kod = mottagen_sträng.substräng (idx1+1, idx2+1);
}
int code_int = code.toInt ();
if (code_int <0 || code_int> 5) {
Serial.println ("INGÅNG KODINGÅNG:");
Serial.println (kod);
lämna tillbaka;
}
bool has_parameter = idx2> -1;
Strängparameter;
if (has_parameter) {
parameter = received_string.substring (idx2 + 1, idx2 + 17); // 16 tecken max
if (parameter.length () <1) {
Serial.println ("PARTAMETER MIN. LÄNGD 1");
_has_new_data = false;
lämna tillbaka;
}
}annan{
om (code_int> 1) {
Serial.println ("PARAMETER KRÄVS!");
_has_new_data = false;
lämna tillbaka;
}
}
Serial.println ();
Serial.print ("input orig =");
Serial.println (mottagen_sträng);
Serial.print ("address =");
Serial.println (adress);
Serial.print ("kod =");
Serial.println (kod);
Serial.print ("parameter =");
Serial.println (parameter);
// SKICKA VIA I2C
Wire.beginTransmission (address_int);
Wire.write (code_int);
if (has_parameter) {
parameter.trim ();
strcpy (param_buf, parameter.c_str ());
Wire.write (param_buf);
}
Wire.endTransmission ();
Serial.println ();
Serial.println ("SKICKAD VIA I2C!");
Serial.println ();
Serial.println ("");
_has_new_data = false;
}
}

visa rawuno_i2c_command_input.ino värd med ❤ av GitHub

Steg 6: Nästa steg

Nästa steg
Nästa steg
Nästa steg
Nästa steg

Uppföljningen ASSIMILATE ACTOR: HEARTBEAT som använder denna tegel har automatisk konfiguration för Crouton via metadata som redan är installerad i ATTINY85 här. JSON -paketet som skickas till Crouton skickas via den senaste firmware för ICOS10. Du kan göra ett Proof-of-concept på en vanlig ESP8266, om bygget är för mycket för nu.

UNO -skissen som används i testning har en funktion för att spara en ny slavadress till EEPROM på ATTINY85, om du har en kollision på din mål -I2C -buss.

Rekommenderad: