BME/P280

BME/P280 bedeutet:

  • BME280: Temperatur, Luftfeuchte und Luftdruck
  • BMP280: Temperatur und Luftdruck

https://myesp8266.blogspot.de/2016/12/bmp280-and-esp8266.html

Code dazu, bezogen auf http://raphuscucullatus.blogspot.de/2017/07/esp-12-bme280-und-mqtt.html unteres Codebeispiel

#include <ESP8266WiFi.h> 
 #include <PubSubClient.h> 
 #include <Wire.h> 
 #include <Adafruit_Sensor.h> 
 #include <Adafruit_BME280.h> 
 
 #define wifi_ssid "XXXXX" 
 #define wifi_password "YYYYY" 
 #define mqtt_server "10.0.0.252" 
 #define mqtt_user "muecke" 
 #define mqtt_password "muecke" 
 #define humidity_topic "sensors/BME280/Humidity" 
 #define temperature_topic "sensors/BME280/Temperature" 
 #define pressure_topic "sensors/BME280/Pressure" 
 #define SEALEVELPRESSURE_HPA (1013.25) 
 
 #define TIMEFRAME 10000 
 
 Adafruit_BME280 bme; // I2C 
 
 WiFiClient espClient; 
 PubSubClient client(espClient); 
 
 long lastMsg = 0; 
 float temp = 0.0; 
 float hum = 0.0; 
 float pressure = 0.0; 
 bool status; 
 
 void setup() { 
 Serial.begin(115200); 
 Serial.println(F("BME280 test")); 
 
 //Wire.pins(0, 2); 
 Wire.pins(4, 5); 
 Wire.begin(); 
 
 status = bme.begin(); 
 if (!status) { 
 Serial.println("Could not find a valid BME280 sensor, check wiring!"); 
 while (1); 
 } 
 Serial.println("-- Default Test --"); 
 
 setup_wifi(); 
 client.setServer(mqtt_server, 1883); 
 } 
 
 
 void loop() { 
 if (!client.connected()) { 
 reconnect(); 
 } 
 client.loop(); 
 long now = millis(); 
 if (now - lastMsg > TIMEFRAME ) { 
 lastMsg = now; 
 temp=bme.readTemperature(); 
 pressure=(bme.readPressure()/100.0F); 
 hum=bme.readHumidity(); 
 
 Serial.println( String(temp).c_str()); 
 client.publish(temperature_topic, String(temp).c_str(), true); 
 Serial.println( String(pressure).c_str()); 
 client.publish(pressure_topic, String(pressure).c_str(), true); 
 Serial.println(String(hum).c_str()); 
 client.publish(humidity_topic, String(hum).c_str(), true); 
 } 
 } 
 
 
 void setup_wifi() { 
 delay(10); 
 // We start by connecting to a WiFi network 
 Serial.println(); 
 Serial.print("Connecting to "); 
 Serial.println(wifi_ssid); 
 WiFi.begin(wifi_ssid, wifi_password); 
 while (WiFi.status() != WL_CONNECTED) { 
 delay(500); 
 Serial.print("."); 
 } 
 Serial.println(""); 
 Serial.println("WiFi connected"); 
 Serial.println("IP address: "); 
 Serial.println(WiFi.localIP()); 
 } 
 
 
 
 void reconnect() { 
 // Loop until we're reconnected 
 while (!client.connected()) { 
 Serial.print("Attempting MQTT connection..."); 
 // Attempt to connect 
 // If you do not want to use a username and password, change next line to 
 // if (client.connect("ESP8266Client")) { 
 if (client.connect("nodemcu", mqtt_user, mqtt_password)) { 
 Serial.println("connected"); 
 } else { 
 Serial.print("failed, rc="); 
 Serial.print(client.state()); 
 Serial.println(" try again in 5 seconds"); 
 // Wait 5 seconds before retrying 
 delay(5000); 
 } 
 } 
 }

Beim Chinamann bekommt man diese mit nicht eindeutiger Funktion/Beschriftung:

SPI-Wirren: Aufdruck
VCC => 3,3V
GND => GND
SCL => SCK (Clock)
SDA => SDI = MOSI
CSB => Cable Select =CS
SDO => Serial Data Out = MISO

 

 

 

Advertisements

Heltec ESP32 LoRa

https://www.thethingsnetwork.org/forum/t/big-esp32-sx127x-topic/10247/37

Sketch mit TTN, Vorsicht bei „little-endian“

#include <lmic.h>
#include <hal/hal.h>
#include <SPI.h>
#include <U8x8lib.h>

#define BUILTIN_LED 25

// the OLED used
U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(/* clock=*/ 15, /* data=*/ 4, /* reset=*/ 16);

// This EUI must be in little-endian format, so least-significant-byte
// first. When copying an EUI from ttnctl output, this means to reverse
// the bytes. For TTN issued EUIs the last bytes should be 0xD5, 0xB3,
// 0x70.
static const u1_t PROGMEM APPEUI[8] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0xB3, 0x70 };
void os_getArtEui (u1_t* buf) {
  memcpy_P(buf, APPEUI, 8);
}

// This should also be in little endian format, see above.
static const u1_t PROGMEM DEVEUI[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
void os_getDevEui (u1_t* buf) {
  memcpy_P(buf, DEVEUI, 8);
}

// This key should be in big endian format (or, since it is not really a
// number but a block of memory, endianness does not really apply). In
// practice, a key taken from ttnctl can be copied as-is.
// The key shown here is the semtech default key.
static const u1_t PROGMEM APPKEY[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
void os_getDevKey (u1_t* buf) {
  memcpy_P(buf, APPKEY, 16);
}

static uint8_t mydata[] = "Hi";
static osjob_t sendjob;

// Schedule TX every this many seconds (might become longer due to duty
// cycle limitations).
const unsigned TX_INTERVAL = 30;

// Pin mapping
const lmic_pinmap lmic_pins = {
  .nss = 18,
  .rxtx = LMIC_UNUSED_PIN,
  .rst = 14,
  .dio = {26, 33, 32},
};

void onEvent (ev_t ev) {
  Serial.print(os_getTime());
  u8x8.setCursor(0, 5);
  u8x8.printf("TIME %lu", os_getTime());
  Serial.print(": ");
  switch (ev) {
case EV_SCAN_TIMEOUT:
  Serial.println(F("EV_SCAN_TIMEOUT"));
  u8x8.drawString(0, 7, "EV_SCAN_TIMEOUT");
  break;
case EV_BEACON_FOUND:
  Serial.println(F("EV_BEACON_FOUND"));
  u8x8.drawString(0, 7, "EV_BEACON_FOUND");
  break;
case EV_BEACON_MISSED:
  Serial.println(F("EV_BEACON_MISSED"));
  u8x8.drawString(0, 7, "EV_BEACON_MISSED");
  break;
case EV_BEACON_TRACKED:
  Serial.println(F("EV_BEACON_TRACKED"));
  u8x8.drawString(0, 7, "EV_BEACON_TRACKED");
  break;
case EV_JOINING:
  Serial.println(F("EV_JOINING"));
  u8x8.drawString(0, 7, "EV_JOINING");
  break;
case EV_JOINED:
  Serial.println(F("EV_JOINED"));
  u8x8.drawString(0, 7, "EV_JOINED ");

  // Disable link check validation (automatically enabled
  // during join, but not supported by TTN at this time).
  LMIC_setLinkCheckMode(0);
  break;
case EV_RFU1:
  Serial.println(F("EV_RFU1"));
  u8x8.drawString(0, 7, "EV_RFUI");
  break;
case EV_JOIN_FAILED:
  Serial.println(F("EV_JOIN_FAILED"));
  u8x8.drawString(0, 7, "EV_JOIN_FAILED");
  break;
case EV_REJOIN_FAILED:
  Serial.println(F("EV_REJOIN_FAILED"));
  u8x8.drawString(0, 7, "EV_REJOIN_FAILED");
  //break;
  break;
case EV_TXCOMPLETE:
  Serial.println(F("EV_TXCOMPLETE (includes waiting for RX windows)"));
  u8x8.drawString(0, 7, "EV_TXCOMPLETE");
  digitalWrite(BUILTIN_LED, LOW);
  if (LMIC.txrxFlags & TXRX_ACK) {
    Serial.println(F("Received ack"));
    u8x8.drawString(0, 7, "Received ACK");
  }
  if (LMIC.dataLen) {
    Serial.println(F("Received "));
    u8x8.drawString(0, 6, "RX ");
    Serial.println(LMIC.dataLen);
    u8x8.setCursor(4, 6);
    u8x8.printf("%i bytes", LMIC.dataLen);
    Serial.println(F(" bytes of payload"));
    u8x8.setCursor(0, 7);
    u8x8.printf("RSSI %d SNR %.1d", LMIC.rssi, LMIC.snr);
  }
  // Schedule next transmission
  os_setTimedCallback(&sendjob, os_getTime() + sec2osticks(TX_INTERVAL), do_send);
  break;
case EV_LOST_TSYNC:
  Serial.println(F("EV_LOST_TSYNC"));
  u8x8.drawString(0, 7, "EV_LOST_TSYNC");
  break;
case EV_RESET:
  Serial.println(F("EV_RESET"));
  u8x8.drawString(0, 7, "EV_RESET");
  break;
case EV_RXCOMPLETE:
  // data received in ping slot
  Serial.println(F("EV_RXCOMPLETE"));
  u8x8.drawString(0, 7, "EV_RXCOMPLETE");
  break;
case EV_LINK_DEAD:
  Serial.println(F("EV_LINK_DEAD"));
  u8x8.drawString(0, 7, "EV_LINK_DEAD");
  break;
case EV_LINK_ALIVE:
  Serial.println(F("EV_LINK_ALIVE"));
  u8x8.drawString(0, 7, "EV_LINK_ALIVE");
  break;
default:
  Serial.println(F("Unknown event"));
  u8x8.setCursor(0, 7);
  u8x8.printf("UNKNOWN EVENT %d", ev);
  break;
  }
}

void do_send(osjob_t* j) {
  // Check if there is not a current TX/RX job running
  if (LMIC.opmode & OP_TXRXPEND) {
Serial.println(F("OP_TXRXPEND, not sending"));
u8x8.drawString(0, 7, "OP_TXRXPEND, not sent");
  } else {
// Prepare upstream data transmission at the next possible time.
LMIC_setTxData2(1, mydata, sizeof(mydata) - 1, 0);
Serial.println(F("Packet queued"));
u8x8.drawString(0, 7, "PACKET QUEUED");
digitalWrite(BUILTIN_LED, HIGH);
  }
  // Next TX is scheduled after TX_COMPLETE event.
}


void setup() {

  Serial.begin(115200);

  u8x8.begin();
  u8x8.setFont(u8x8_font_chroma48medium8_r);
  u8x8.drawString(0, 1, "LoRaWAN LMiC");

  SPI.begin(5, 19, 27);

  // LMIC init
  os_init();
  // Reset the MAC state. Session and pending data transfers will be discarded.
  LMIC_reset();

  // Start job (sending automatically starts OTAA too)
  do_send(&sendjob);

  pinMode(BUILTIN_LED, OUTPUT);
  digitalWrite(BUILTIN_LED, LOW);
}

void loop() {
  os_runloop_once();
}

Single Channel Gateway mit dem Brett, Tab 2 anpassen!

https://www.thethingsnetwork.org/forum/t/big-esp32-sx127x-topic/10247/128

LoRa Mote II Software für TTN

Alles unklar, Neuland!

 

  • lora development tools
    http://www.microchip.com/DevelopmentTools/ProductDetails.aspx?PartNO=dv164140-2
  • Java-Shit-Konfigurationsprogramm läuft weder unter Windows virtualisiert, es fehlen die Semtech-Treiber für USB-Seriell die nur durch Registrierung erhältlich sind, EINE SCHEISSE!:
    http://www.st.com/en/development-tools/stsw-link009.html
  • Stunden später, unzählige VMs, 32-Bit, 63-Bit. Internetexplorer…
    Windows .jar-starten ohne Browser: Explorer, in Ordner, Shit-Taste in Ordner, Eingabeaufforderung hier starten, „java -jar test.jar“ , vorher st-link-Shit installieren, Programm startet und…findet keine Mote II…na klasse.
  • Unter Linux: 32-Bit-Shit nachinstalliert, Programm startet nicht, da javafx oder sowas fehlt…?! WTF?!
  • Verzweiflungsversuch unter Linux als root:
    picocom -b 57600 --omap crcrlf --echo /dev/ttyACM0

    => Terminal ready, Helly Yeah!
    Mit CTRL-A  CTRL-Q kommt man aus dem Scheiss raus.

    picocom -b 57600 --omap crcrlf --echo /dev/ttyACM0
    picocom v2.2
    
    port is : /dev/ttyACM0
    flowcontrol : none
    baudrate is : 57600
    parity is : none
    databits are : 8
    stopbits are : 1
    escape is : C-a
    local echo is : yes
    noinit is : no
    noreset is : no
    nolock is : no
    send_cmd is : sz -vv
    receive_cmd is : rz -vv -E
    imap is : 
    omap is : crcrlf,
    emap is : crcrlf,delbs,
    
    Type [C-a] [C-h] to see available commands
    
    Terminal ready
  • nach 10h Herumprobieren endlich die Freischaltung für den „inner circle“ von semtech bekommen und dort mit dem Moteconfigtool erfolgreich diese Dreckskiste konfigurieren können:
    https://semtech.force.com/lora/LC_ArticleSearch?ArticleType=ToolsAndSW__kav

Node-Red und TTN:

 

MQTT und TTN:

https://www.thethingsnetwork.org/docs/applications/mqtt/quick-start.html

Mühsam, Eichhörnchen...
 mosquitto_sub -h eu.thethings.network -t '+/devices/+/up' -u 'wvss' -P 'ttn-account...' -v

 

Ultraschallabstandsensor HC-SR04 mit mqtt

Sensor tut nur mit 5V, an 3,3V geht nix

Verdrahtung

HC-SC04
| Vcc | 5V
| Trig | 12 => D6
| Echo | 13 =>D7
| Gnd | GND

#include <ESP8266WiFi.h>
 #include <PubSubClient.h>
 #include <Ultrasonic.h>

Ultrasonic ultrasonic(12, 13);

#define wifi_ssid "SSID"
 #define wifi_password "supergeheimespasswort"

#define mqtt_server "10.16.4.253"
 #define abstand_topic "abstand"

WiFiClient espClient;
 PubSubClient client(espClient);

void setup() {
 Serial.begin(115200);
 Serial.println("mqtt-Test");
 setup_wifi();
 client.setServer(mqtt_server, 1883);
 }

void setup_wifi() {
 delay(10);
 // We start by connecting to a WiFi network
 Serial.println();
 Serial.print("Connecting to ");
 Serial.println(wifi_ssid);
 WiFi.begin(wifi_ssid, wifi_password);

while (WiFi.status() != WL_CONNECTED) {
 delay(500);
 Serial.print(".");
 }

Serial.println("");
 Serial.println("WiFi connected");
 Serial.println("IP address: ");
 Serial.println(WiFi.localIP());
 }

void reconnect() {
 // Loop until we're reconnected
 while (!client.connected()) {
 Serial.print("Attempting MQTT connection...");
 // Attempt to connect
 // If you do not want to use a username and password, change next line to
 // if (client.connect("ESP8266Client")) {
 if (client.connect("abstand01")) {
 Serial.println("connected");
 } else {
 Serial.print("failed, rc=");
 Serial.print(client.state());
 Serial.println(" try again in 5 seconds");
 // Wait 5 seconds before retrying
 delay(5000);
 }
 }
 }




void loop() {
 if (!client.connected()) {
 reconnect();
 }
 client.loop();

int Abstand = ultrasonic.distanceRead();

//Serial.print("Distance in CM: ");
 // Pass INC as a parameter to get the distance in inches
 Serial.println(ultrasonic.distanceRead());
 // client.publish(temperature_topic, String(temp).c_str(), true);
 client.publish(abstand_topic, String(Abstand).c_str(), true);

delay(1000);

}