Raspberry Mobile Information and Content Server MICS

Aufsetzen AP nach dieser Anleitung

https://www.raspberrypi.org/documentation/configuration/wireless/access-point-routed.md

Installation Node-RED Installation MQTT

Im Pi Desktop Gehäuse

Button zum Runterfahren und Hochfahren https://github.com/Howchoo/pi-power-button

button

Nach Anschließen der Stromversorgung fährt bootet der Pi automatisch. Dazzu muss zusätzlich die SSD gestartet werden. a) Blauen Button solange drücken, bis blaues Licht ausgeht, dann erneut kurz blauen Button drücken. Dan schaltet sich die SSD dazu und der Pi bootet.

Drückt man den roten Button, fährt der Pi kontrolliert das System runter und wechseln in den Wake-Up-Mode. Erneutes Drücken des roten Button fährt dern Pi wieder noch. Der blaue Button muss dazu nicht nochmal gedrückt werden.

Aktivieren von VNC Damit der Desktop auch ohne Monitor bootet, muss man in der config.txt

Booten ohne Monitor Adding hdmi_force_hotplug=1

Wemos mit SCD30 als Sensor

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <Wire.h>
#include "SparkFun_SCD30_Arduino_Library.h"

const char* SSID = "Ocean_Drive";
const char* PASSWORD = "********";
const char* MQTT_SERVER = "192.168.4.1";
const char* MQTT_TOPIC = "home/MQTT-Test";
const uint16_t MESSAGE_LEN = 10;

SCD30 airSensorSCD30; // Objekt SDC30 Umweltsensor
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
uint32_t lastTimestamp = 0;
uint32_t messageId = 0;
int CO2 = 0 ;

void setupWifi() {
  WiFi.mode(WIFI_STA);
  delay(10);
  Serial.printf("Starte Verbindung mit %s.\n", SSID);
  WiFi.begin(SSID, PASSWORD);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.printf("Verbunden mit %s.\n", SSID);
  Serial.printf("IP-Adresse: %s.\n", WiFi.localIP().toString().c_str());
}

void reconnect() {
  while (!mqttClient.connected()) {
    String clientId = "MQTT-Client-" + String(random(0xffff), HEX);
    Serial.print("Suche den MQTT-Broker...");
    if (mqttClient.connect(clientId.c_str())) {
      Serial.printf("verbunden als %s.\n", clientId.c_str());
    } else {
      Serial.printf("Fehlercode: %d.", mqttClient.state());
      Serial.println(" Neuer Versuch in 5 Sekunden.");
      delay(5000);
    }
  }
}

void setup() {
  randomSeed(micros());
  Serial.begin(115200);
  setupWifi();
  mqttClient.setServer(MQTT_SERVER, 1883);

  Wire.begin(); // ---- Initialisiere den I2C-Bus 

  if (Wire.status() != I2C_OK) Serial.println("Something wrong with I2C");

  if (airSensorSCD30.begin() == false) {
    Serial.println("The SCD30 did not respond. Please check wiring."); 
    while(1) {
      yield(); 
      delay(1);
    } 
  }
  airSensorSCD30.setAutoSelfCalibration(false); // Sensirion no auto calibration
  airSensorSCD30.setMeasurementInterval(2);     // CO2-Messung alle 5 s
  Wire.setClock(100000L);            // 100 kHz SCD30 
  Wire.setClockStretchLimit(200000L);// CO2-SCD30

}

void loop() {
  reconnect();
  mqttClient.loop();

  const uint32_t now = millis();
  if (now - lastTimestamp > 2000) {
    CO2 = airSensorSCD30.getCO2() ;
    Serial.print("CO2:"+String(String(CO2)));
    char message[MESSAGE_LEN];
    lastTimestamp = now;
    snprintf(message, MESSAGE_LEN, "%ld", CO2);

    Serial.printf("Sende Nachricht: %s\n", message);
    mqttClient.publish(MQTT_TOPIC, message);
  }
}