Home

Newsy

Google_plusTechmaniak
Komórkomania
Komputer Świat

Przydatne strony

Baza telefonów
Identyfikacja telefonu IMEI
Autokonfiguracja telefonu
Zdjęcie SimLock
Hot-Spoty
Mikro-PC
Nawigacja
Serwis GSM
Aero 2
Konwerter Youtube-mp3
 

Ciekawostki

System z pendrive
Android na PC
Konfiguracja Dual SIM
Tworzenie apl. Android
Free Mcboot PS2
Gry na PS2
Gry na PS2 iso
Programy do Konsol
Nawigacja Windows CE
Odblokowanie radia Ford

 

Robotyka

mirekk36 - BLOG
Forum - Atnel
Microkontrolery blogspot
Kurs Androida-eklipse
Forum Arduino Polska
Sklepy
Forbot
ATNEL
Botland
abc-rc
 

Geocaching

Opencaching
Geocaching
Szyfry
Darmowe Mapy
Generator QR
Sklep
Certyfikaty

 


 

 

Logowanie

Statystyki

Sterownik Oświetlenia - UDP

Prace rozwojowe tytułowego sterownika cały czas posuwają się do przodu.
W poprzednim artykule poruszyłem temat czujnika temperatury opartego na DHT 11.
Projektując sterownik pomyślałem sobie dlaczego by nie rozszerzyć go o dodatkowe funkcje, przecież moduł który został wykorzystany ma sporo wolnych pinów które można by wykorzystać.
I tak narodziła się idea dołożenia czujnika temperatury oraz zmodyfikowaniu ewentualnie napisaniu od nowa aplikacji sterowniczej.

sterownik UDP


Jak możecie zobaczyć na załączonym schemacie do podstawowego układu został dołożony czujnik temperatury oraz jeden rezystor.
Konstrukcja banalnie prosta a dająca możliwość podglądu panującej temperatury w pomieszczeniu w którym został zamontowany moduł sterowniczy.
Czujnik został podłączony do płytki za pomocą pół metrowego trzy żyłowego przewodu po to żeby nie odczytywał ewentualnie temperatury sąsiadujących z nim elementów elektronicznych.
Rezystor który został dołożony między nóżki DHT 11 Vcc oraz Data trzeba dobrać doświadczalnie aby wskazanie z odczytu było zbliżone do rzeczywistej temperatury.
Ktoś mógłby zapytać a po co mi to?
Ja osobiście wynik pomiaru przekazuje na panel wyświetlacza smartfona w celach informacyjnych oraz dydaktycznych. Ale możliwości jest mnóstwo. Chociażby sterowanie żaluzjami, wentylatorem, piecem CO,
czy też instalacją alarmową gdy w pomieszczeniu jest zbyt wysoka lub niska temperatura.
Przy okazji zrealizowałem swoje wcześniejsze plany.
Otóż, zmieniłem całkowicie program dla „Wemoos ponieważ  od samego początku moim celem była komunikacja między urządzeniami w protokole UDP.
Dlaczego? Ponieważ komunikacja jest dużo łatwiejsza nie potrzebująca łączenia się ze sobą na stałe
współpracujących ze sobą urządzeń jak było w dotychczasowym projekcie.
Obecnie wystarczy że urządzenie zaloguje się do domowej sieci WiFi, następnie przechodzi w tryb nasłuchu.
Jeżeli tylko wykryje instrukcje które zostały dla niego adresowane natychmiast je pobiera i realizuje a jeżeli jest taka potrzeba odpowiada adresatowi przesyłając informacje czy też chociażby potwierdzenie że otrzymał rozkazy i je wykonuje.

#include <ESP8266WiFi.h>
#include <WiFiUDP.h>
#include "DHT.h"
#include <SimpleDHT.h>

int pinDHT11 = D3;
SimpleDHT11 dht11;

int msg;
int msg1;
int ipwr;
int powr;

const char* ssid = "Pdaazpl"; //nazwa domowej sieci WiFi. Wstaw swoją nazwę
const char* password = "902994f0d84736604"; // hasło domowej sieci WiFi. Wstaw swoje hasło

WiFiUDP Udp;

unsigned int localUdpPort = 3000;  // port na jakim będzie pracował sterownik. Ustal swój adres portu
char incomingPacket[255];  // wielkość bufora danych
char  replyPacekt[] = "Wiadomosc odebrana";  // odpowiedź jaka ma być wysłana

char packetBuffer[UDP_TX_PACKET_MAX_SIZE+1];

void setup()
{
pinMode(D1, OUTPUT);
digitalWrite(D1, HIGH);
pinMode(D2, OUTPUT);
digitalWrite(D2, HIGH);


 
  Serial.begin(115200);
  Serial.println();

  Serial.printf("Lacze z %s ", ssid);
  WiFi.mode(WIFI_STA); //Moduł WiFi jako stacja robocza (WIFI_AP, WIFI_STA lub WIFI_AP_STA.)
  WiFi.begin(ssid, password);
 
  // nr IP pod jakim będzie pracował sterownik. Ustal swój adres IP i pszostałe parametry sieci
  WiFi.config(IPAddress(192, 168, 0, 160), IPAddress(192, 168, 0, 1), IPAddress(255, 255, 255, 0));
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println(" polaczony");

  Udp.begin(localUdpPort);
  Serial.printf("Sterownik Oswietlenia IP %s, UDP port %d\n", WiFi.localIP().toString().c_str(), localUdpPort);
}


void loop(){
for(int i=0;i<9900000;i++) // czas co jaki ma być dokonany i wysłany odczyt temperatury w ( ms ).

if (i<1)
{
   Serial.println(" ");
  Serial.println("Odczyt z czujnika");
 
  // Odczyt
  byte temperatura = 0;
  byte wilgotnosc = 0;
  if (dht11.read(pinDHT11, &temperatura, &wilgotnosc, NULL))
  {
    Serial.print("Awaria Czujnika");
    Udp.beginPacket(ipwr, powr);
    Udp.print ( "Awaria czujnika" );
    Udp.endPacket();
    delay(500);
    return;
  }
 
  Serial.print("Odczyt OK: ");
  Serial.print((int)temperatura); Serial.print(" *C, ");
  Serial.print((int)wilgotnosc); Serial.println(" %");

msg = ((int)temperatura);
msg1 = ((int)wilgotnosc);


 Udp.beginPacket(ipwr, powr);
 Udp.print ( msg ); Udp.print ( " şC    " ); Udp.print ( msg1 ); Udp.print ( " %" );
 Udp.endPacket();
   
  delay(500);
}
else
{
  int packetSize = Udp.parsePacket();
  if (packetSize)
  {
    // receive incoming UDP packets
    Serial.printf("Odpowiedzialem Nadawcy IP %d %s, port %d\n", packetSize, Udp.remoteIP().toString().c_str(), Udp.remotePort());
    int len = Udp.read(incomingPacket, 255);
    if (len > 0)
    {
      incomingPacket[len] = 0;
    }
    Serial.printf("Odebralem: %s\n", incomingPacket);

     Udp.read(incomingPacket,UDP_TX_PACKET_MAX_SIZE); 
   // Serial.println("Odebralem:"); 
    //kończymy je jak ciąg znaków znkiem NUL (0) 
    incomingPacket[packetSize]=0; 
    //wyświetlamy zawartość pakietu 
 //   Serial.println(incomingPacket); 
      
    if(incomingPacket[0]=='A'){ 
        digitalWrite(D1, LOW); 
       // Serial.println("LED1 ENABLED");
     }
     else
     {
     if(incomingPacket[0]=='B')
        digitalWrite(D1, HIGH); 
       // Serial.println("LED1 DISABLET"); 
     }

     if(incomingPacket[0]=='C'){ 
        digitalWrite(D2, LOW); 
       // Serial.println("LED2 ENABLED");
     }
     else
     {
     if(incomingPacket[0]=='D')
        digitalWrite(D2, HIGH); 
       // Serial.println("LED2 DISABLET"); 
     }
 
 
 ipwr = Udp.remoteIP();
 powr = Udp.remotePort();
   
    // wysyła wiadomość na IP i port z jakiego przyszło zapytanie
  Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
    Udp.write(replyPacekt);
    Udp.endPacket();
  }
}
}


Jak się domyślacie daje to ogromne możliwości współpracy urządzeń w obrębie sieci.
W obecnej wersji zaprogramowałem tak sterownik że wykonuje polecenia „załącz, wyłącz dwóch kanałów
i przesyła wynik odczytu temperatury do urządzenia z którego zostało wysłane polecenie.
Oczywiście program sterowniczy na Androida również się zmienił.
Został napisany od nowa, ograniczony do dwóch kanałów ale za to został wyposażony w pole odczytu informacji jakie do niego będą przesyłały Wifi jednocześnie uproszczając mechanizm komunikacji.

Program został napisany w Arduino 1.65
Aplikacja do pobrania z mojego serwera Bulb-UDP v1

 

Bezpieczna strona 

Web Design
Certyfikat zgodności

AVR

Arduino moduły:
WeMos mini D1

WiFi ESP - 01
WiFi ESP - 03
WiFi NodeMcu
LCD
Czujnik DHT 11, 12
Arduino Pin Mode
Microcontrolery:
Programowanie - Eclipse
Programowanie B4A
Inteligentny dom:
Sterownik WiFi oświetlenia

Smartphone

Samsung Note 2
Opis
Romy
Samsung Omnia
Opis
Romy
HTC HD
Opis
Romy
Android w HTC HD
LG p990 2x
Opis
Romy
Programy Android
Systemowe
Użytkowe
Widgety
Programy WM
Systemowe
Użytkowe
Nakładki
Audio - Video
Gry
Inne
WWW
Nawigacja
PlayStation 2