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

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. 

Electronic TiltMaze

Cílem tohoto projektu je vytvoření jednoduchého ovládacího systému, který umožňuje naklápění dvou servomotorů pomocí analogového joysticku. Platforma řízená servomotory může simulovat pohyb například v ose X a Y — tedy naklánění doleva/doprava a dopředu/dozadu. Tento systém může sloužit jako základ pro různé aplikace:

- Manuální ovládání kamery nebo senzoru (např. na pohyblivé konstrukci nebo robotovi)
- Interaktivní ovládací panel pro školní projekty nebo herní ovladač