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

Saimon říká:

Hra „Simon říká“ realizovaná pomocí Arduina je skvělým projektem, jehož cílem je spojit zábavu s učením a rozvojem technických dovedností. Hráč se snaží zapamatovat a správně zopakovat sekvenci světelných nebo zvukových signálů, čímž si trénuje paměť, koncentraci a rychlé reakce.

ROBOTICKÉ RAMENO

Stavebnice obsahuje všechny potřebné díly na sestavení robotnického ramene včetně spojovacího materiálu, pouze je nutné dokoupit čtyři kusy MIKRO SERV SG90. Dále je nutné dokoupit řídící jednotku já jsem použil domácí zásoby ARDUINO NANO a pro něho pak modul ARDUINO NANO IO SHIELD pro jednoduchost zapojení. Díly pro sestavení ramene jdou dobře tzv. vylamovat „vypadávají skoro sami. K servům pokud použijete nové tak doporučuji je před montáží odzkoušet zda jsou funkční v plném rozsahu tj. od 0° do 180°, po namontování a zjištění že servo nefunguje to pak opravdu dost zahýbá s nervy.