Датчик температуры и влажности с проводной шиной RS485 на микроконтроллере STM8. Собран был на макетке. Передает данные в формате JSON.
Зачем это надо:
Датчик для автоматизации вытяжки в подвале гаража, по команде отправляет данные с датчика SHT30 в сеть RS485 в формате JSON.
Схема:
Точнее то, как подключены модули
Код:
для STM8 на языке С (без плюсов) и для Arduino IDE.
#include <Wire.h> #include <Serial.h> #define SHT30_address 0x45 #define DERE 13 // PD4. ноги DERE RS485 const char cmd = '1'; // ID void setup() { Wire_begin(); Serial_begin(9600); pinMode(DERE, OUTPUT); // digitalWrite(DERE, HIGH); // Serial_print_s("OK"); digitalWrite(DERE, LOW); // прием } void loop() { // ждем команду if (Serial_available()) { delay(2); char val0 = Serial_read(); // отсекаем команду от мусора char readCmd = Serial_read(); if (val0 == '!' && readCmd == cmd){ // SHT30 byte data[6]; Wire_beginTransmission(SHT30_address); Wire_write(0x2C); Wire_write(0x06); Wire_endTransmission(); delay(500); Wire_requestFrom(SHT30_address, 6); for (byte i = 0; Wire_available() > 0; i++){ data[i] = Wire_read(); } // конвертируем данные с датчика в понятный float temp = ((((data[0] * 256.0) + data[1]) * 175) / 65535.0) - 45; float hum = ((((data[3] * 256.0) + data[4]) * 100.0) / 65535.0); // включаем передачу и отправляем. digitalWrite(DERE, HIGH); delay(100); //{"sensor":"cellar","temp":30.4,"hum":50.4} Serial_print_s("{\"s\":\"cr\",\"temp\":"); Serial_print_f(temp); Serial_print_s(",\"hum\":"); Serial_print_f(hum); Serial_print_s("}"); delay(100); digitalWrite(DERE, LOW); } } }