SigFox a DHT11 na ThingSpeak

Zapojení a otestování IOT LPWAN SigFox Node UART Modemu s měřičem vlhkosti a teploty - DHT11 na vývojové desce - Arduino

- dnes jsem si připravil poněkud složitější projekt založený na odesílání dat z DHT11 do SigFox sítě a posléze směrování dat na ThingSpeak, avšak věřím že pokud budete následovat mé kroky, i vám se zadaří.

- po zakoupení samotného modemu doporučuji projít jeho instalaci na webu.

- poté si vytvořte profil na Thingspeaku a při vytváření "channelu" napište do kolonek přesně toto :

Pak si pohrajte s nastavením callbacku. Je nutné, abyste nejprve okopírovali text ze záložky API Keys v ThingSpeaku pro "Update a channel feed".

Ten si někam odložíme (třeba do textového editoru) a spojíme ho s kódem:

&field1={device}&field2={customData#cislo1}&field3={customData#cislo2}&field4={customData#cislo3}&field5={rssi}&field6={seqNumber

Výsledný kód pak bude vypadat nějak takto:

https://api.thingspeak.com/update?api_key=Váš-API-klíč&field1={device}&field2={customData#cislo1}&field3={customData#cislo2}&field4={customData#cislo3}&field5={rssi}&field6={seqNumber

Rozhodně kód nekopírujte odsud a nedoplňujte pouze API klíč!

 Spojení s modemem

V backend.sigfox.com půjdeme na Device type -> Callbacks -> New

Kolonky vyplňte cca. takto:

Potvrďte tlačítkem "Ok" a nyní zapojte do modemu anténu a spojte ho s Arduinem podle návodu na webu, ke kterému máte link výše.

Do Arduina připojte zároveň i DHT11 podle schématu níže (DHT22 lze také, ale musí se trochu poupravit kód).

A do Arduina nahrajte kód, který je níže:

// Sigfox modem - odesílání dat
#include "DHT.h"
// připojení potřebné knihovny
#include <SoftwareSerial.h>
#define DHTTYPE DHT11
#define DHTPIN 2 
// nastavení projojovacích pinů
#define TX 7
#define RX 8
DHT dht(DHTPIN, DHTTYPE);
// inicializace softwarové sériové linky z knihovny
SoftwareSerial Sigfox(RX, TX);
void setup() {
  Serial.begin(9600);
  Serial.println("DHT11 test!");

  dht.begin();
  pinMode(3, OUTPUT);
  pinMode(9, INPUT);
  // zahájení komunikace po sériové lince rychlostí 9600 baud
  Serial.begin(9600);
  // zahájení komunikace po softwarové sériové lince rychlostí 9600 baud
  Sigfox.begin(9600);
  delay(1000);
  // odeslání první zprávy
  odesliData();

}

void loop() {
  // když dostaneme nějaké znaky na softwarové sériové lince,
  // odešleme je do počítače
  if (Sigfox.available()) {
    Serial.write(Sigfox.read());
  }
  // když dostaneme nějaké znaky na počítačové sériové lince,
  // odešleme je do Sigfox modulu
  if (Serial.available()) {
    Sigfox.write(Serial.read());
  }
  // každých 30 minut se provede následující odeslání dat
  // (30 minut je získáno tak, že načteme počet vteřin od
  // zapnutí napájení, zjistíme zbytek po dělení 1800 vteřinami
  // a pokud je tento zbytek 0, máme 30 minutový interval)
    if ((millis()/1000 % 1800) == 0) {
    odesliData();
  }
}
void odesliData() {
    // vytvoření proměnné typu char o velikosti 4 znaků,
    // do 4 hexa znaků lze uložit číslo typu uint
    // (velikost 0 až 65535)
    char zprava[12];
    // vytvoření proměnné typu unsigned integer a načtení hodnoty
    // analogového pinu A0
    float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);
   if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
    unsigned int cislo1 = (t);
    unsigned int cislo2 = (h);
    unsigned int cislo3 = analogRead(A2);
    // převod načteného čísla na hexadecimální tvar o 4 znacích
    sprintf(zprava, "%04X%04X%04X", cislo1, cislo2, cislo3);
    Serial.print("Odeslani dat do Sigfox site, odesilam: ");
    Serial.print(cislo1);
    Serial.print(", ");
    Serial.print(cislo2);
    Serial.print(", ");
    Serial.print(cislo3);
    Serial.print(", hexa tvar: ");
    Serial.println(zprava);
    Sigfox.print("AT$SF=");
    Sigfox.println(zprava);
    
    delay(1000);
    
}

Pokud jste vše správně nastavili, měla by se po nahrání změnit data stavu posledního přijmutí zprávy na hlavní straně "Device" na stránce backend.sigfox.com. a pokud jste dobře nastavili i callback, budete mít na ThingSpeaku data.

Jádro editovaného zdrojového kódu: http://navody.dratek.cz/

Dotazy pište na: adahu04@gmail.com

Další podobné články

Test ESC a BLDC motoru

Cílem tohoto Arduino projektu je testování a kalibrace obousměrného regulátoru otáček (ESC) pomocí PWM signálu. Program simuluje sekvenci pohybů: dopředu, neutrální pozici a reverzní chod, což umožňuje ověřit správnou funkci ESC včetně přepínání směru otáčení motoru.

Laserový alarm

Cílem tohoto projektu je vytvořit jednoduchý, ale funkční bezpečnostní systém, který detekuje narušení prostoru pomocí vysílače (laserového paprsku) a přijímače (fotorezistoru). Jakmile je paprsek přerušen, Arduino to vyhodnotí jako narušení a spustí alarm – například zvukový signál pomocí piezo bzučáku.