Inhaltsverzeichnis:
- Schritt 1: Material und Werkzeuge
- Schritt 2: Bereiten Sie das ATTINY85. vor
- Schritt 3: Bauen Sie die Schaltung zusammen
- Schritt 4: Testen
- Schritt 5: Nächste Schritte
Video: IOT123 - I2C MQ2 BRICK - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:20
Die IOT123 BRICKS sind modulare DIY-Einheiten, die mit anderen IOT123 BRICKS kombiniert werden können, um einem Knoten oder Wearable Funktionalität hinzuzufügen. Sie basieren auf den quadratischen, doppelseitigen Protoboards mit miteinander verbundenen Durchgangslöchern.
Es wird erwartet, dass sich eine Reihe dieser BRICKS auf mehreren Knoten (Master-MCUs – ESP8266 oder ATTINY84) an einem Standort befinden. Die MCU benötigt keine Vorkenntnisse über den Sensorzweck oder die Softwareanforderungen. Es sucht nach I2C-Knoten und fordert dann von jedem Slave einen Property-Dump (Sensordaten) an. Diese BRICKs liefern 5.0V, 3.3V und eine weitere AUX-Leitung, die anpassbar ist.
Dieser I2C MQ2 BRICK dumpt 3 Eigenschaften:
LPG (Teile pro Million), CO (PPM), RAUCHEN (PPM)
Dieser Sensor bietet ein interessantes Szenario: Er benötigt mindestens 2 Minuten (bis zu 5 Minuten) zum Aufwärmen, dann muss er sich vor der Verwendung 20 Sekunden lang kalibrieren. Da die Host-MCU nur daran interessiert ist, Name/Wert-Paare (und eine Fortsetzungsnachricht) zu erhalten, haben wir eine "PREPARE"-Eigenschaft eingeführt. Da seine Fortsetzungsnachricht "1" ist (weitere folgen), wird die Host-MCU den BRICK so lange abfragen, bis er bereit ist. Außerdem wird empfohlen, den MQ2 vor der Verwendung "einzubrennen", d.h. 24 Stunden lang an Ihrem 5V-Stromkreis angeschlossen zu lassen.
Die Sensorbausteine vom Typ Keyes werden zuerst abstrahiert, da sie mit Vitaminen (zusätzliche Komponenten benötigt) geliefert werden und relativ günstig sind (ich habe 37 für 10 AUD gekauft). Andere Boards/Schaltungen werden in die I2C BRICKS eingeführt.
Die Durchgangslöcher neben dem ATTINY85 wurden ungenutzt gelassen, um einen Pogo-Pin-Programmierer zu ermöglichen, während der DIP8 an die Leiterplatte gelötet wird.
Eine weitere Abstraktion, bei der die BRICKS in kleine Zylinder verpackt werden, die an einen D1M WIFI BLOCK-Hub angeschlossen werden und die Werte an einen MQTT-Server pumpen, wird entwickelt.
Schritt 1: Material und Werkzeuge
Es gibt eine vollständige Stücklisten- und Beschaffungsliste.
- MQ2 Sensorbaustein (1)
- ATTINY85 20PU (1)
- 1" Doppelseitiges Protoboard (1)
- Stiftleiste 90º (3P, 3P)
- Stiftleiste (2P, 2P)
- Jumper-Shunt (1)
- Anschlusskabel (~7)
- Löten und Eisen (1)
Schritt 2: Bereiten Sie das ATTINY85. vor
AttinyCore vom Boards Manager wird benötigt. Brennen Sie den Bootloader "EEPROM Retained", "8mHZ Internal" (alle Konfiguration oben gezeigt).
Verwenden Sie die mitgelieferte Quelle; kompilieren und programmieren auf dem ATtiny85.
Das GIST ist hier:
gist.github.com/IOT-123/4c501046d365d01a60…
Weitere Details finden Sie in diesen instructables:
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…
Testen Sie am besten über ein Steckbrett, bevor Sie fortfahren.
Wenn Sie über ASSIMILATE SENSORS verfügen, stellen Sie sicher, dass die Slave-Adresse bei einer SENSOR/MCU-Host-Kombination unterschiedlich ist, d. h. alle Temperatursensoren können dieselbe Adresse haben, solange Sie nur einen Temperatursensor auf einer MCU/einem Knoten haben.
Schritt 3: Bauen Sie die Schaltung zusammen
- Auf der Vorderseite die Komponenten ATTINY85 (1), 3P 90deg Stiftleisten (2)(3), 2P Stiftleisten (4)(5) einsetzen und auf der Rückseite ablöten.
- Auf der Rückseite einen orangefarbenen Draht von ORANGE1 zu ORANGE2 verfolgen und verlöten.
- Auf der Rückseite ein blaues Kabel von BLUE1 zu BLUE2 verfolgen und verlöten.
- Auf der Rückseite einen grünen Draht von GREEN1 zu GREEN2 verfolgen und löten.
- Auf der Rückseite einen blanken Draht von SILVER1 zu SILVER2 verfolgen und verlöten.
- Auf der Rückseite einen blanken Draht von SILVER3 zu SILVER4 verfolgen und verlöten.
- Auf der Rückseite ein schwarzes Kabel von BLACK1 zu BLACK2 verfolgen und verlöten.
- Auf der Rückseite ein schwarzes Kabel von BLACK3 zu BLACK4 verfolgen und verlöten.
- Auf der Rückseite einen roten Draht von RED1 zu RED2 verfolgen und löten.
- Auf der Rückseite einen roten Draht von RED3 zu RED4 verfolgen und löten.
- Auf der Rückseite ein gelbes Kabel von GELB1 zu GELB2 verfolgen und löten.
Der Sensor kann nun direkt über seine Pins mit der Platine oder über Drähte an den im Pinvertrag angegebenen Punkten verbunden werden.
Schritt 4: Testen
Es wird erwartet, dass sich eine Reihe dieser BRICKS auf mehreren Knoten (MCUs – ESP8266 oder ATTINY84) in einer Umgebung befinden. Dies ist ein Unit-Test: überprüft die UNO-Anfragen/-Antworten, bis alle Daten ausgegeben wurden, vernachlässigt dann den I2C-Slave.
- Laden Sie den UNO-Code in Ihren UNO-Testkabelbaum hoch. Stellen Sie sicher, dass ADDRESS_SLAVE mit der I2C-Adresse des BRICK übereinstimmt.
- Verbinden Sie die 5.0V von UNO mit einem VCC auf BRICK.
- Stellen Sie sicher, dass der Jumper für diesen Pin eingeschaltet ist.
- Verbinden Sie GND von UNO mit GND von BRICK.
- Verbinden Sie A5 auf UNO mit SCL auf BRICK.
- Verbinden Sie die A4 auf UNO mit SDA auf BRICK.
- Schließen Sie einen 4K7-Pull-up-Widerstand von SDA an VCC an.
- Schließen Sie einen 4K7-Pull-up-Widerstand von SCL an VCC an.
- Verbinden Sie Ihr UNO über USB mit Ihrem Dev-PC.
- Öffnen Sie die Arduino Console. Choose 9600 Baud (starten Sie die UNO neu und öffnen Sie die Konsole erneut, wenn Sie müssen).
- Die Eigenschaftsnamen und -werte sollten einmal auf der Konsole ausgegeben werden, dann wird das Wort sleep wiederholt.
Wenn Sie "Setup" sehen, werden 3 Müllzeilen wiederholt, und Sie haben möglicherweise Ihre SDA- und SCL-Zeilen von hinten nach vorne.
I2C-Master-Logging vom I2C-Slave mit Plotter-/Metadaten-Unterstützung
#enthalten |
#defineADDRESS_SLAVE10 |
bool _outputPlotterOnly = false; |
bool _confirmedMetadata = false; |
int_packetSegment = 0; |
bool _i2cNodeProcessed = false; |
char_property[2][24] = {"Name", "Wert"}; |
voidsetup() { |
Wire.begin(); // i2c-Bus beitreten (Adresse optional für Master) |
Serial.begin (9600); // seriell für die Ausgabe starten |
Verzögerung (1000); |
if (!_outputPlotterOnly){ |
Serial.println("Setup"); |
Serial.println(); |
} |
} |
Leerschleife () { |
if (_i2cNodeProcessed){ |
if (!_confirmedMetadata){// lass den Slave wissen, dass er mit dem Senden von Sensordaten beginnen soll |
Verzögerung(1); |
Wire.beginTransmission(ADDRESS_SLAVE); |
Wire.write(1); |
Wire.endTransmission(); |
Verzögerung (100); |
_confirmedMetadata = true; |
} |
_i2cNodeProcessed = false; |
if (!_outputPlotterOnly){ |
Serial.println(); |
} |
Rückkehr; |
} |
Wire.requestFrom(ADDRESS_SLAVE, 16); |
_PaketSegment++; |
char-Paket[16]; |
intindex = 0; |
bool isContinueSegment = false; // continueSegment (der 3.) 1=mehr, 0=letzter |
while (Wire.available()) {// Slave sendet möglicherweise weniger als angefordert |
Zeichen c = Wire.read(); |
Paket[index] = int(c) > -1 ? c: ''; // ungültige Zeichen durch Leerzeichen ersetzen |
if (_paketSegment == 3){ |
_PaketSegment = 0; |
isContinueSegment = true; |
//Seriell.println("-------------"); |
//Seriell.println(int(c)); |
//Seriell.println("-------------"); |
if (int(c) == 48 || int(c) == 86){// 0 auf der letzten Eigenschaft |
_i2cNodeProcessed = wahr; |
// Werte an MQTT senden |
brechen; |
} |
} |
index++; |
} |
if (!isContinueSegment){ |
if (!_outputPlotterOnly){ |
Serial.println (Paket); |
} |
strcpy(_property[_packetSegment - 1], packet); // lokale Variable mit Name/Wert setzen |
}anders{ |
if (_outputPlotterOnly && _confirmedMetadata){ |
if (_i2cNodeProcessed){ |
Serial.println (_property[1]); |
}anders{ |
Serial.print (_property[1]); |
Serial.print(""); |
} |
} |
} |
} |
rawuno_i2c_generic_sensor_test_w_plotter_v2.ino anzeigen, gehostet mit ❤ von GitHub
Schritt 5: Nächste Schritte
Das Grundlayout der Schaltung und der I2C-Schicht der Software ist auf viele verschiedene Sensoren bezogen. Das Wichtigste für den Anfang ist der Paketvertrag zwischen Master und Slave.
Ich habe ein (3D-gedrucktes) verpacktes Netzwerk von Sensoren geplant/gestartet, die dieses Framework verwenden und mit ihm verlinken, wenn Teile veröffentlicht werden.
Dieser BLOCK wird vom MQ2 ASSIMILATE SENSOR verwendet.
Empfohlen:
IOT123 - SENSORNABEN ZUSAMMENSETZEN: ICOS10 GENERIC SHELL (ANSCHLUSSKABEL) Montage: 4 Schritte
IOT123 - ASSIMILATE SENSOR HUB: ICOS10 GENERIC SHELL (HOOKUP WIRE) Montage: UPDATE Wir empfehlen die Verwendung der IDC-Schaltung (nicht HOOKUP) für mehr Zuverlässigkeit. Diese HOOKUP-Baugruppe ist für nicht geschäftskritischen Betrieb geeignet, wenn Sie Zeit haben, den Stromkreis zu überprüfen. Ich fand einige Drähte (obere Schicht der Paneele: rot/gelb) nicht lang genug