Firmware do rolet dla silniczka krokowego

User avatar
michael
Posts: 870
Joined: Wed Nov 09, 2016 8:00 am
Location: Wojkowice

Thu May 16, 2019 8:25 am

Też miałem problemy, konkretnie z DHT22 - wywaliłem i jest OK

Code: Select all

/**
 * Supla.org NodeMCU WiFi minimal example
 * Author: Programistyk - Kamil Kaminski <kamil@programistyk.pl>
 * 
 * This example shows how to configure SuplaDevice for building for NodeMCU within Arduino IDE
 */


#include <srpc.h>
#include <log.h>
#include <eh.h>
#include <proto.h>
#include <IEEE754tools.h>
// We define our own ethernet layer
#define SUPLADEVICE_CPP
#include <SuplaDevice.h>
#include <lck.h>

#include <WiFiClient.h>
#include <ESP8266WiFiType.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiScan.h>
#include <ESP8266WiFiMulti.h>
#include <WiFiServer.h>
#include <ESP8266WiFiGeneric.h>
#include <WiFiClientSecure.h>
#include <ESP8266WiFiAP.h>
#include <ESP8266WiFiSTA.h>
#include <WiFiUdp.h>
//#include <DHT.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include "Stepper_28BYJ_48.h"

extern "C" {
#include "user_interface.h"
}

//#define DHTPIN 02    // Pin number
//#define DHTTYPE DHT22

// Setup a DHT instance
//DHT dht(DHTPIN, DHTTYPE);

// Setup a oneWire instance
OneWire oneWire(2);    // Pin number

// Pass oneWire reference to Dallas Temperature
DallasTemperature sensors(&oneWire);

WiFiClient client;
ADC_MODE(ADC_VCC);

int switch_1_pin = 1;                     // sterowanie silnikiem
int switch_2_pin = 3;                     // połączyć zworą z 4 i 5

Stepper_28BYJ_48 stepper(13,12,14,16);    // wyjście silnika

// Setup Supla connection
const char* ssid     = "wifi";
const char* password = "haslo";

// DHT22 Sensor read implementation
//void get_temperature_and_humidity(int channelNumber, double *temp, double *humidity) {

//    *temp = dht.readTemperature();
//    *humidity = dht.readHumidity();

//    if ( isnan(*temp) || isnan(*humidity) ) {
//      *temp = -275;
//      *humidity = -1;
//    }

//}

// DS18B20 Sensor read implementation
double get_temperature(int channelNumber, double last_val) {

    double t = -275;
    
      switch(channelNumber) {
        
        case 1:
               t = WiFi.RSSI();
               break;
        case 2: 
               t = ESP.getVcc() / 100.0;
               break;
       };

    return t;  
}

void setup() {
  Serial.begin(115200);
  delay(10);
  SuplaDevice.setName("Roleta");              // zmiana nazwy mdułu w supla
  pinMode(switch_1_pin,INPUT_PULLUP);
  pinMode(switch_2_pin,INPUT_PULLUP);

  // Init DHT library 
//  dht.begin(); 
  
  // Set temperature/humidity callback
//  SuplaDevice.setTemperatureHumidityCallback(&get_temperature_and_humidity);

  // Init DS18B20 library 
  sensors.begin();
  
  // Set temperature callback
  SuplaDevice.setTemperatureCallback(&get_temperature);
 
  // Replace the falowing GUID
  uint8_t mac[WL_MAC_ADDR_LENGTH];
  WiFi.macAddress(mac);
  char GUID[SUPLA_GUID_SIZE] = {0x20,0x19,0x05,0x10, 
                                        mac[WL_MAC_ADDR_LENGTH - 6], 
                                        mac[WL_MAC_ADDR_LENGTH - 5], 
                                        mac[WL_MAC_ADDR_LENGTH - 4], 
                                        mac[WL_MAC_ADDR_LENGTH - 3], 
                                        mac[WL_MAC_ADDR_LENGTH - 2], 
                                        mac[WL_MAC_ADDR_LENGTH - 1],
                                        0x01,0x12,0x34,0x56,0x78,0x90};

  // lub pobieramy identyfikator urządzenia ze strony https://www.supla.org/arduino/get-guid i wprowadzamy wiersz wyżej

  /*
   * Having your device already registered at cloud.supla.org,
   * you want to change CHANNEL sequence or remove any of them,
   * then you must also remove the device itself from cloud.supla.org.
   * Otherwise you will get "Channel conflict!" error.
   */
    
  // CHANNEL0 - DHT22 Sensor
//  SuplaDevice.addDHT22();

  // CHANNEL1,2 - DS (lub inne dane)
  SuplaDevice.addDS18B20Thermometer();
  SuplaDevice.addDS18B20Thermometer();

  // CHANNEL3 - TWO RELAYS (Roller shutter operation)
  SuplaDevice.addRollerShutterRelays(4,     // 46 - Pin number where the 1st relay is connected   
                                     5, true);    // 47 - Pin number where the 2nd relay is connected  

   //SuplaDevice.setRollerShutterButtons(3,    // 0 - Channel Number
   //                                   20,   // 20 - Pin where the 1st button is connected
   //                                   21);  // 21 - Pin where the 2nd button is connected

  // CHANNEL4 - Opening sensor (Normal Open)
 SuplaDevice.addSensorNO(2); // A0 - Pin number where the sensor is connected
                               // Call SuplaDevice.addSensorNO(A0, true) with an extra "true" parameter
                               // to enable the internal pull-up resistor


  SuplaDevice.begin(GUID,              // Global Unique Identifier
                    mac,               // Ethernet MAC address
                    "svr1.supla.org",  // SUPLA server address
                    1234,                 // Location ID
                    "haslo");               // Location Password



  Serial.println();
  Serial.println("Booting Sketch...");
  WiFi.mode(WIFI_AP_STA);
  WiFi.begin(ssid, password);
  WiFi.softAPdisconnect(true);                               // wyłączenie rozgłaszania sieci ESP
  wifi_station_set_hostname("E_Supla_roleta");       // zmiana zazwy ESP w sieci lokalnej

  while(WiFi.waitForConnectResult() != WL_CONNECTED){
    WiFi.begin(ssid, password);
    Serial.println("WiFi failed, retrying.");
  }

}


void loop() {
  SuplaDevice.iterate();
//  SuplaDevice.setTemperatureHumidityCallback(&get_temperature_and_humidity);
  Roletka();
}

// Supla.org ethernet layer
    int supla_arduino_tcp_read(void *buf, int count) {
        _supla_int_t size = client.available();
       
        if ( size > 0 ) {
            if ( size > count ) size = count;
            return client.read((uint8_t *)buf, size);
        };
    
        return -1;
    };
    
    int supla_arduino_tcp_write(void *buf, int count) {
        return client.write((const uint8_t *)buf, count);
    };
    
    bool supla_arduino_svr_connect(const char *server, int port) {
          return client.connect(server, 2015);
    }
    
    bool supla_arduino_svr_connected(void) {
          return client.connected();
    }
    
    void supla_arduino_svr_disconnect(void) {
         client.stop();
    }
    
    void supla_arduino_eth_setup(uint8_t mac[6], IPAddress *ip) {

       // Serial.println("WiFi init");
        WiFi.begin(ssid, password);

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

        Serial.print("\nlocalIP: ");
        Serial.println(WiFi.localIP());
        Serial.print("subnetMask: ");
        Serial.println(WiFi.subnetMask());
        Serial.print("gatewayIP: ");
        Serial.println(WiFi.gatewayIP());
    }

SuplaDeviceCallbacks supla_arduino_get_callbacks(void) {
          SuplaDeviceCallbacks cb;
          
          cb.tcp_read = &supla_arduino_tcp_read;
          cb.tcp_write = &supla_arduino_tcp_write;
          cb.eth_setup = &supla_arduino_eth_setup;
          cb.svr_connected = &supla_arduino_svr_connected;
          cb.svr_connect = &supla_arduino_svr_connect;
          cb.svr_disconnect = &supla_arduino_svr_disconnect;
          cb.get_temperature = &get_temperature;
//          cb.get_temperature_and_humidity = get_temperature_and_humidity;
          cb.get_rgbw_value = NULL;
          cb.set_rgbw_value = NULL;
          
          return cb;
}

void Roletka() {
  
      if ( digitalRead(switch_1_pin) == LOW ) {
                stepper.step(-1);
        }

      if ( digitalRead(switch_2_pin) == LOW ) {
                stepper.step(1);
        }
 }
 
Kabel ucięty na miarę zawsze jest za krótki...
User avatar
pilcu
Posts: 123
Joined: Fri Jan 11, 2019 9:49 am
Location: Wrocław

Thu May 16, 2019 8:47 am

michael wrote:
Thu May 16, 2019 8:25 am
Też miałem problemy, konkretnie z DHT22 - wywaliłem i jest OK

Code: Select all

/**
 * Supla.org NodeMCU WiFi minimal example
 * Author: Programistyk - Kamil Kaminski <kamil@programistyk.pl>
 * 
 * This example shows how to configure SuplaDevice for building for NodeMCU within Arduino IDE
 */


#include <srpc.h>
#include <log.h>
#include <eh.h>
#include <proto.h>
#include <IEEE754tools.h>
// We define our own ethernet layer
#define SUPLADEVICE_CPP
#include <SuplaDevice.h>
#include <lck.h>

#include <WiFiClient.h>
#include <ESP8266WiFiType.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiScan.h>
#include <ESP8266WiFiMulti.h>
#include <WiFiServer.h>
#include <ESP8266WiFiGeneric.h>
#include <WiFiClientSecure.h>
#include <ESP8266WiFiAP.h>
#include <ESP8266WiFiSTA.h>
#include <WiFiUdp.h>
//#include <DHT.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include "Stepper_28BYJ_48.h"

extern "C" {
#include "user_interface.h"
}

//#define DHTPIN 02    // Pin number
//#define DHTTYPE DHT22

// Setup a DHT instance
//DHT dht(DHTPIN, DHTTYPE);

// Setup a oneWire instance
OneWire oneWire(2);    // Pin number

// Pass oneWire reference to Dallas Temperature
DallasTemperature sensors(&oneWire);

WiFiClient client;
ADC_MODE(ADC_VCC);

int switch_1_pin = 1;                     // sterowanie silnikiem
int switch_2_pin = 3;                     // połączyć zworą z 4 i 5

Stepper_28BYJ_48 stepper(13,12,14,16);    // wyjście silnika

// Setup Supla connection
const char* ssid     = "wifi";
const char* password = "haslo";

// DHT22 Sensor read implementation
//void get_temperature_and_humidity(int channelNumber, double *temp, double *humidity) {

//    *temp = dht.readTemperature();
//    *humidity = dht.readHumidity();

//    if ( isnan(*temp) || isnan(*humidity) ) {
//      *temp = -275;
//      *humidity = -1;
//    }

//}

// DS18B20 Sensor read implementation
double get_temperature(int channelNumber, double last_val) {

    double t = -275;
    
      switch(channelNumber) {
        
        case 1:
               t = WiFi.RSSI();
               break;
        case 2: 
               t = ESP.getVcc() / 100.0;
               break;
       };

    return t;  
}

void setup() {
  Serial.begin(115200);
  delay(10);
  SuplaDevice.setName("Roleta");              // zmiana nazwy mdułu w supla
  pinMode(switch_1_pin,INPUT_PULLUP);
  pinMode(switch_2_pin,INPUT_PULLUP);

  // Init DHT library 
//  dht.begin(); 
  
  // Set temperature/humidity callback
//  SuplaDevice.setTemperatureHumidityCallback(&get_temperature_and_humidity);

  // Init DS18B20 library 
  sensors.begin();
  
  // Set temperature callback
  SuplaDevice.setTemperatureCallback(&get_temperature);
 
  // Replace the falowing GUID
  uint8_t mac[WL_MAC_ADDR_LENGTH];
  WiFi.macAddress(mac);
  char GUID[SUPLA_GUID_SIZE] = {0x20,0x19,0x05,0x10, 
                                        mac[WL_MAC_ADDR_LENGTH - 6], 
                                        mac[WL_MAC_ADDR_LENGTH - 5], 
                                        mac[WL_MAC_ADDR_LENGTH - 4], 
                                        mac[WL_MAC_ADDR_LENGTH - 3], 
                                        mac[WL_MAC_ADDR_LENGTH - 2], 
                                        mac[WL_MAC_ADDR_LENGTH - 1],
                                        0x01,0x12,0x34,0x56,0x78,0x90};

  // lub pobieramy identyfikator urządzenia ze strony https://www.supla.org/arduino/get-guid i wprowadzamy wiersz wyżej

  /*
   * Having your device already registered at cloud.supla.org,
   * you want to change CHANNEL sequence or remove any of them,
   * then you must also remove the device itself from cloud.supla.org.
   * Otherwise you will get "Channel conflict!" error.
   */
    
  // CHANNEL0 - DHT22 Sensor
//  SuplaDevice.addDHT22();

  // CHANNEL1,2 - DS (lub inne dane)
  SuplaDevice.addDS18B20Thermometer();
  SuplaDevice.addDS18B20Thermometer();

  // CHANNEL3 - TWO RELAYS (Roller shutter operation)
  SuplaDevice.addRollerShutterRelays(4,     // 46 - Pin number where the 1st relay is connected   
                                     5, true);    // 47 - Pin number where the 2nd relay is connected  

   //SuplaDevice.setRollerShutterButtons(3,    // 0 - Channel Number
   //                                   20,   // 20 - Pin where the 1st button is connected
   //                                   21);  // 21 - Pin where the 2nd button is connected

  // CHANNEL4 - Opening sensor (Normal Open)
 SuplaDevice.addSensorNO(2); // A0 - Pin number where the sensor is connected
                               // Call SuplaDevice.addSensorNO(A0, true) with an extra "true" parameter
                               // to enable the internal pull-up resistor


  SuplaDevice.begin(GUID,              // Global Unique Identifier
                    mac,               // Ethernet MAC address
                    "svr1.supla.org",  // SUPLA server address
                    1234,                 // Location ID
                    "haslo");               // Location Password



  Serial.println();
  Serial.println("Booting Sketch...");
  WiFi.mode(WIFI_AP_STA);
  WiFi.begin(ssid, password);
  WiFi.softAPdisconnect(true);                               // wyłączenie rozgłaszania sieci ESP
  wifi_station_set_hostname("E_Supla_roleta");       // zmiana zazwy ESP w sieci lokalnej

  while(WiFi.waitForConnectResult() != WL_CONNECTED){
    WiFi.begin(ssid, password);
    Serial.println("WiFi failed, retrying.");
  }

}


void loop() {
  SuplaDevice.iterate();
//  SuplaDevice.setTemperatureHumidityCallback(&get_temperature_and_humidity);
  Roletka();
}

// Supla.org ethernet layer
    int supla_arduino_tcp_read(void *buf, int count) {
        _supla_int_t size = client.available();
       
        if ( size > 0 ) {
            if ( size > count ) size = count;
            return client.read((uint8_t *)buf, size);
        };
    
        return -1;
    };
    
    int supla_arduino_tcp_write(void *buf, int count) {
        return client.write((const uint8_t *)buf, count);
    };
    
    bool supla_arduino_svr_connect(const char *server, int port) {
          return client.connect(server, 2015);
    }
    
    bool supla_arduino_svr_connected(void) {
          return client.connected();
    }
    
    void supla_arduino_svr_disconnect(void) {
         client.stop();
    }
    
    void supla_arduino_eth_setup(uint8_t mac[6], IPAddress *ip) {

       // Serial.println("WiFi init");
        WiFi.begin(ssid, password);

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

        Serial.print("\nlocalIP: ");
        Serial.println(WiFi.localIP());
        Serial.print("subnetMask: ");
        Serial.println(WiFi.subnetMask());
        Serial.print("gatewayIP: ");
        Serial.println(WiFi.gatewayIP());
    }

SuplaDeviceCallbacks supla_arduino_get_callbacks(void) {
          SuplaDeviceCallbacks cb;
          
          cb.tcp_read = &supla_arduino_tcp_read;
          cb.tcp_write = &supla_arduino_tcp_write;
          cb.eth_setup = &supla_arduino_eth_setup;
          cb.svr_connected = &supla_arduino_svr_connected;
          cb.svr_connect = &supla_arduino_svr_connect;
          cb.svr_disconnect = &supla_arduino_svr_disconnect;
          cb.get_temperature = &get_temperature;
//          cb.get_temperature_and_humidity = get_temperature_and_humidity;
          cb.get_rgbw_value = NULL;
          cb.set_rgbw_value = NULL;
          
          return cb;
}

void Roletka() {
  
      if ( digitalRead(switch_1_pin) == LOW ) {
                stepper.step(-1);
        }

      if ( digitalRead(switch_2_pin) == LOW ) {
                stepper.step(1);
        }
 }
 
Przed kompilacją trzeba wpisać MAC i GUID?

Będę to wgrywał na wemosa i tylko będzie sterowanie roletą, bez temp itp.
User avatar
michael
Posts: 870
Joined: Wed Nov 09, 2016 8:00 am
Location: Wojkowice

Thu May 16, 2019 8:49 am

Nie, tylko ustawienia swojej sieci wifi oraz ustawienia serwera, id i hasło lokalizacji
Kabel ucięty na miarę zawsze jest za krótki...
User avatar
pilcu
Posts: 123
Joined: Fri Jan 11, 2019 9:49 am
Location: Wrocław

Thu May 16, 2019 9:00 am

michael wrote:
Thu May 16, 2019 8:49 am
Nie, tylko ustawienia swojej sieci wifi oraz ustawienia serwera, id i hasło lokalizacji
OK. Dzięki bardzo za info.
Na weekend kolega wydrukuje mi elementy z filamentu PET. Trochę mniej twardy niż ABS. Myślę że wytrzyma.

Ty składałeś to na Wemosie? Masz jakiś mały schemacik jak to spiąć z kontrolerem silniczka?
Wojtka zdjęcie jest trochę mało czytelne dla mnie.
User avatar
michael
Posts: 870
Joined: Wed Nov 09, 2016 8:00 am
Location: Wojkowice

Thu May 16, 2019 9:02 am

pilcu wrote:
Thu May 16, 2019 9:00 am
Wojtka zdjęcie jest trochę mało czytelne dla mnie.
Dla mnie też :lol:
Jeszcze tego nie pospinałem do kupy, jestem w trakcie :)
Kabel ucięty na miarę zawsze jest za krótki...
User avatar
pilcu
Posts: 123
Joined: Fri Jan 11, 2019 9:49 am
Location: Wrocław

Thu May 16, 2019 9:15 am

michael wrote:
Thu May 16, 2019 9:02 am
pilcu wrote:
Thu May 16, 2019 9:00 am
Wojtka zdjęcie jest trochę mało czytelne dla mnie.
Dla mnie też :lol:
Jeszcze tego nie pospinałem do kupy, jestem w trakcie :)
Spoko, spoko. Jak coś skleisz do kupy to daj znać, ja i tak czekam na wydrukowanie, także będę po weekendzie z tym działał.
User avatar
wojtas567
Posts: 1645
Joined: Sun Apr 03, 2016 7:16 pm
Location: Olsztyn

Thu May 16, 2019 10:20 am

Te czujniki temperatury można usunąć pozostałość z podstawowego kodu a może coś tam uciekło i stąd jakieś błędy.
moduł ESP mam na dedykowanej podstawce i z lewej strony od dołu jest +5V a potem 4 GPIO pod które podpiąłem bezpośrednio płytkę sterownika silnika krokowego masa jest poprowadzona górą do tego kondensatora, minimum kombinowania :D. Pod spodem stabilizator 3V3, drugi kondensator jest na 3V3 dla dodatkowej stabilizacji.
Pozdrawiam
Wojtek
User avatar
pilcu
Posts: 123
Joined: Fri Jan 11, 2019 9:49 am
Location: Wrocław

Thu May 16, 2019 11:01 am

Skompilowałem sobie plik bin. Wrzucony na Wemosa rozgłasza sieć jako AP.
Co dalej mam z tym zrobić? Mogę się z nim połączyć ale nie ma on przecież wifi managera więc trzeba jakoś go zmusić aby wyszedł z trybu AP.
User avatar
wojtas567
Posts: 1645
Joined: Sun Apr 03, 2016 7:16 pm
Location: Olsztyn

Thu May 16, 2019 11:04 am

a połączył się z Twoją siecią ?
Pozdrawiam
Wojtek
User avatar
pilcu
Posts: 123
Joined: Fri Jan 11, 2019 9:49 am
Location: Wrocław

Thu May 16, 2019 11:06 am

wojtas567 wrote:
Thu May 16, 2019 11:04 am
a połączył się z Twoją siecią ?
Właśnie nie. To on rozgłasza sieć a nie próbuje się podłączyć do routera.
Post Reply