اطلاعیه

Collapse
No announcement yet.

هوشمند سازی تبادل اطلاعات و هم فکری

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    هوشمند سازی تبادل اطلاعات و هم فکری

    دوستان من چند وقته شدیدا علاقه مند شدم هوشمند سازی گفتم یه تاپیک بزنم باهم دیگه تبادل اطلاعات کنیم
    اولش من رله و پیریز هوشمند و لامپ میخریدم قبلا خیلی ارزون بود یادمه پیریز هوشمند شیائومی 85 تومن میخریدم الان دیگه نمیصرفه خودم درست میکنم با esp32
    چنتا فریم ور داره cadio که فیلتره rainmaker خوب جواب گرفتم ادافروت رابط کاربریشو دوست نداشتم تاسموتا عالیه دانش برنامه نویسی هم نیاز نداره فقط لوکال هست من سعی میکنم چیزایی که میسازم میزارم اینجا لطف کنید دوستانی که علاقه مندن مخصوصصا تو سوتی های الکترونیکی که میدم حتما راهنمایی کنن
    و اینکه کلا راجب هوشمند سازی با راحترین راه حل و ارزونترین روش ها به همدیگه کمک کنیم

    #2
    اولین تجربه
    برد esp32
    ماژول رله 8 تایی
    8 تا پیریز رو کار +سیم جامپر + اداپتور جهت تامین برق برد و ماژول

    روی برد فریم ور https://tasmota.github.io/install رو انلاین نصب میکنی و فقط بهش خروجی هارو میدی تمام
    به صورت وحشتناکی اسون هست و تو کمتر از 15 دقیقه 8 تاپیریز رو هوشمند کردم رابط کاربری اندروید و ای او اس هم داره
    تنها بدی داستان لوکال بودنه و از اینترنت نمیشد کنترل کرد یه سری راه حل داره مثل استفاده از اسپیکر امازون و ...
    ضعف بعدی که کمی رو مخ بود با هربار برق رفتن ای پی ادرس لوکال تغییر میکرد و کمی به دردسر میوفتادی تو یافتن ای پی جدید
    ولی در کل حتی یک نصفه خط کد نویسی هم انجام ندادم


    تجربه دوم :
    برد esp32
    ماژول رله 8 تایی
    8 تا پیریز رو کار +سیم جامپر + اداپتور جهت تامین برق برد و ماژول​
    کلی روش بود که esprainmaker بیشتر از همه رو مخم بود میخواستم انجامش بدم ولی نرم افزار ارداینو واقعا ایرادات خیلی مذخرفی میگرفت (اینم بگم این وسط که چنتا روش دیگه هم رفتم مثل سینریک و کادیو و... که یه سری ایرادات ضعف داشت که حتی اگر موفق میشدم به انجامش به دردم نمیخورد برا همین بیشتر چسبیدم به این رینمیکر)
    این روش رو کمی جامع توضیح میدم شاید به دردتون بخوره من تو اوقات بیکاری تازگیا خیلی تو انجمن میچرخم واس یادگیری خودم البته حالا اینوسط بتونیم چهارتا چیز بهم یاد بدیم عالی میشه قیمت یه رله هوشمند حدود 400 تومنه ولی این 8 تا پیریز با تمام ماژول و.. از سایت ها تهیه کردم چنتاش از همین فروشگاه بود و وسایلی که از قبل داشتم حدود 700-800 بیشتر هزینه نشد
    بزرگترین مشکل مربوط به پر بودم حافظه esp32 هست قبل هرکاری با ادرس زیر یه فکتوری ریست بزنید یا فریم ور رو اپدیت کنید


    از نرم افزار اردوینو موقع فلش کردن اپلود تیک رین مرکر رو بزنید
    بارکد تولید شده تو مرحله نهایی ممکنخ بار اول اسکن نشه چند باری باید تست کنید تا بره جلو
    اینم کد نهایی که باهاش جواب گرفتم 8 تا پیریز با 8 تا سویچ یا کلید برای مواقعی که اینترنت قطع هست یا نیاز دارید فیزیکی روشن خاموش کنید

    include <RMaker.h>
    include <RMakerDevice.h>
    include <RMakerNode.h>
    include <RMakerParam.h>
    include <RMakerQR.h>
    include <RMakerType.h>
    include <RMakerUtils.h>
    /************************************************** ********************************
    include "RMaker.h"
    include "WiFi.h"
    include "WiFiProv.h"

    const char *service_name = "pariseiran";
    const char *pop = "1234567";
    // define the Device Names
    char deviceName_1[] = "Switch1";
    char deviceName_2[] = "Switch2";
    char deviceName_3[] = "Switch3";
    char deviceName_4[] = "Switch4";
    char deviceName_5[] = "Switch5";
    char deviceName_6[] = "Switch6";
    char deviceName_7[] = "Switch7";
    char deviceName_8[] = "Switch8";
    // define the GPIO connected with Relays and switches
    static uint8_t RelayPin1 = 23; //D23
    static uint8_t RelayPin2 = 22; //D22
    static uint8_t RelayPin3 = 21; //D21
    static uint8_t RelayPin4 = 19; //D19
    static uint8_t RelayPin5 = 18; //D18
    static uint8_t RelayPin6 = 5; //D5
    static uint8_t RelayPin7 = 25; //D25
    static uint8_t RelayPin8 = 26; //D26
    static uint8_t SwitchPin1 = 13; //D13
    static uint8_t SwitchPin2 = 12; //D12
    static uint8_t SwitchPin3 = 14; //D14
    static uint8_t SwitchPin4 = 27; //D27
    static uint8_t SwitchPin5 = 33; //D33
    static uint8_t SwitchPin6 = 32; //D32
    static uint8_t SwitchPin7 = 15; //D15
    static uint8_t SwitchPin8 = 4; //D4
    static uint8_t wifiLed = 2; //D2
    static uint8_t gpio_reset = 0;
    /* Variable for reading pin status*/
    // Relay State
    bool toggleState_1 = LOW; //Define integer to remember the toggle state for relay 1
    bool toggleState_2 = LOW; //Define integer to remember the toggle state for relay 2
    bool toggleState_3 = LOW; //Define integer to remember the toggle state for relay 3
    bool toggleState_4 = LOW; //Define integer to remember the toggle state for relay 4
    bool toggleState_5 = LOW; //Define integer to remember the toggle state for relay 5
    bool toggleState_6 = LOW; //Define integer to remember the toggle state for relay 6
    bool toggleState_7 = LOW; //Define integer to remember the toggle state for relay 7
    bool toggleState_8 = LOW; //Define integer to remember the toggle state for relay 8
    // Switch State
    bool SwitchState_1 = LOW;
    bool SwitchState_2 = LOW;
    bool SwitchState_3 = LOW;
    bool SwitchState_4 = LOW;
    bool SwitchState_5 = LOW;
    bool SwitchState_6 = LOW;
    bool SwitchState_7 = LOW;
    bool SwitchState_8 = LOW;
    //The framework provides some standard device types like switch, lightbulb, fan, temperature sensor.
    static Switch my_switch1(deviceName_1, &RelayPin1);
    static Switch my_switch2(deviceName_2, &RelayPin2);
    static Switch my_switch3(deviceName_3, &RelayPin3);
    static Switch my_switch4(deviceName_4, &RelayPin4);
    static Switch my_switch5(deviceName_5, &RelayPin5);
    static Switch my_switch6(deviceName_6, &RelayPin6);
    static Switch my_switch7(deviceName_7, &RelayPin7);
    static Switch my_switch8(deviceName_8, &RelayPin8);
    void sysProvEvent(arduino_event_t *sys_event)
    {
    switch (sys_event->event_id) {
    case ARDUINO_EVENT_PROV_START:
    #if CONFIG_IDF_TARGET_ESP32
    Serial.printf("\nProvisioning Started with name "%s" and PoP "%s" on BLE\n", service_name, pop);
    printQR(service_name, pop, "ble");
    #else
    Serial.printf("\nProvisioning Started with name "%s" and PoP "%s" on SoftAP\n", service_name, pop);
    printQR(service_name, pop, "softap");
    endif
    break;
    case ARDUINO_EVENT_WIFI_STA_CONNECTED:
    Serial.printf("\nConnected to Wi-Fi!\n");
    digitalWrite(wifiLed, true);
    break;
    }
    }
    void write_callback(Device *device, Param *param, const param_val_t val, void *priv_data, write_ctx_t *ctx)
    {
    const char *device_name = device->getDeviceName();
    const char *param_name = param->getParamName();
    if(strcmp(device_name, deviceName_1) == 0) {

    Serial.printf("Lightbulb = %s\n", val.val.b? "true" : "false");

    if(strcmp(param_name, "Power") == 0) {
    Serial.printf("Received value = %s for %s - %s\n", val.val.b? "true" : "false", device_name, param_name);
    toggleState_1 = val.val.b;
    (toggleState_1 == false) ? digitalWrite(RelayPin1, HIGH) : digitalWrite(RelayPin1, LOW);
    param->updateAndReport(val);
    }

    } else if(strcmp(device_name, deviceName_2) == 0) {

    Serial.printf("Switch value = %s\n", val.val.b? "true" : "false");
    if(strcmp(param_name, "Power") == 0) {
    Serial.printf("Received value = %s for %s - %s\n", val.val.b? "true" : "false", device_name, param_name);
    toggleState_2 = val.val.b;
    (toggleState_2 == false) ? digitalWrite(RelayPin2, HIGH) : digitalWrite(RelayPin2, LOW);
    param->updateAndReport(val);
    }

    } else if(strcmp(device_name, deviceName_3) == 0) {

    Serial.printf("Switch value = %s\n", val.val.b? "true" : "false");
    if(strcmp(param_name, "Power") == 0) {
    Serial.printf("Received value = %s for %s - %s\n", val.val.b? "true" : "false", device_name, param_name);
    toggleState_3 = val.val.b;
    (toggleState_3 == false) ? digitalWrite(RelayPin3, HIGH) : digitalWrite(RelayPin3, LOW);
    param->updateAndReport(val);
    }

    } else if(strcmp(device_name, deviceName_4) == 0) {

    Serial.printf("Switch value = %s\n", val.val.b? "true" : "false");
    if(strcmp(param_name, "Power") == 0) {
    Serial.printf("Received value = %s for %s - %s\n", val.val.b? "true" : "false", device_name, param_name);
    toggleState_4 = val.val.b;
    (toggleState_4 == false) ? digitalWrite(RelayPin4, HIGH) : digitalWrite(RelayPin4, LOW);
    param->updateAndReport(val);
    }

    } else if(strcmp(device_name, deviceName_5) == 0) {

    Serial.printf("Lightbulb = %s\n", val.val.b? "true" : "false");

    if(strcmp(param_name, "Power") == 0) {
    Serial.printf("Received value = %s for %s - %s\n", val.val.b? "true" : "false", device_name, param_name);
    toggleState_5 = val.val.b;
    (toggleState_5 == false) ? digitalWrite(RelayPin5, HIGH) : digitalWrite(RelayPin5, LOW);
    param->updateAndReport(val);
    }

    } else if(strcmp(device_name, deviceName_6) == 0) {

    Serial.printf("Switch value = %s\n", val.val.b? "true" : "false");
    if(strcmp(param_name, "Power") == 0) {
    Serial.printf("Received value = %s for %s - %s\n", val.val.b? "true" : "false", device_name, param_name);
    toggleState_6 = val.val.b;
    (toggleState_6 == false) ? digitalWrite(RelayPin6, HIGH) : digitalWrite(RelayPin6, LOW);
    param->updateAndReport(val);
    }

    } else if(strcmp(device_name, deviceName_7) == 0) {

    Serial.printf("Switch value = %s\n", val.val.b? "true" : "false");
    if(strcmp(param_name, "Power") == 0) {
    Serial.printf("Received value = %s for %s - %s\n", val.val.b? "true" : "false", device_name, param_name);
    toggleState_7 = val.val.b;
    (toggleState_7 == false) ? digitalWrite(RelayPin7, HIGH) : digitalWrite(RelayPin7, LOW);
    param->updateAndReport(val);
    }

    } else if(strcmp(device_name, deviceName_8) == 0) {

    Serial.printf("Switch value = %s\n", val.val.b? "true" : "false");
    if(strcmp(param_name, "Power") == 0) {
    Serial.printf("Received value = %s for %s - %s\n", val.val.b? "true" : "false", device_name, param_name);
    toggleState_8 = val.val.b;
    (toggleState_8 == false) ? digitalWrite(RelayPin8, HIGH) : digitalWrite(RelayPin8, LOW);
    param->updateAndReport(val);
    }
    }
    }
    void manual_control()
    {
    if (digitalRead(SwitchPin1) == LOW && SwitchState_1 == LOW) {
    digitalWrite(RelayPin1, LOW);
    toggleState_1 = 1;
    SwitchState_1 = HIGH;
    my_switch1.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_1);
    Serial.println("Switch-1 on");
    }
    if (digitalRead(SwitchPin1) == HIGH && SwitchState_1 == HIGH) {
    digitalWrite(RelayPin1, HIGH);
    toggleState_1 = 0;
    SwitchState_1 = LOW;
    my_switch1.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_1);
    Serial.println("Switch-1 off");
    }
    if (digitalRead(SwitchPin2) == LOW && SwitchState_2 == LOW) {
    digitalWrite(RelayPin2, LOW);
    toggleState_2 = 1;
    SwitchState_2 = HIGH;
    my_switch2.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_2);
    Serial.println("Switch-2 on");
    }
    if (digitalRead(SwitchPin2) == HIGH && SwitchState_2 == HIGH) {
    digitalWrite(RelayPin2, HIGH);
    toggleState_2 = 0;
    SwitchState_2 = LOW;
    my_switch2.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_2);
    Serial.println("Switch-2 off");
    }
    if (digitalRead(SwitchPin3) == LOW && SwitchState_3 == LOW) {
    digitalWrite(RelayPin3, LOW);
    toggleState_3 = 1;
    SwitchState_3 = HIGH;
    my_switch3.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_3);
    Serial.println("Switch-3 on");
    }
    if (digitalRead(SwitchPin3) == HIGH && SwitchState_3 == HIGH) {
    digitalWrite(RelayPin3, HIGH);
    toggleState_3 = 0;
    SwitchState_3 = LOW;
    my_switch3.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_3);
    Serial.println("Switch-3 off");
    }
    if (digitalRead(SwitchPin4) == LOW && SwitchState_4 == LOW) {
    digitalWrite(RelayPin4, LOW);
    toggleState_4 = 1;
    SwitchState_4 = HIGH;
    my_switch4.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_4);
    Serial.println("Switch-4 on");
    }
    if (digitalRead(SwitchPin4) == HIGH && SwitchState_4 == HIGH) {
    digitalWrite(RelayPin4, HIGH);
    toggleState_4 = 0;
    SwitchState_4 = LOW;
    my_switch4.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_4);
    Serial.println("Switch-4 off");
    }
    if (digitalRead(SwitchPin5) == LOW && SwitchState_5 == LOW) {
    digitalWrite(RelayPin5, LOW);
    toggleState_5 = 1;
    SwitchState_5 = HIGH;
    my_switch5.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_5);
    Serial.println("Switch-5 on");
    }
    if (digitalRead(SwitchPin5) == HIGH && SwitchState_5 == HIGH) {
    digitalWrite(RelayPin5, HIGH);
    toggleState_5 = 0;
    SwitchState_5 = LOW;
    my_switch5.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_5);
    Serial.println("Switch-5 off");
    }
    if (digitalRead(SwitchPin6) == LOW && SwitchState_6 == LOW) {
    digitalWrite(RelayPin6, LOW);
    toggleState_6 = 1;
    SwitchState_6 = HIGH;
    my_switch6.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_6);
    Serial.println("Switch-6 on");
    }
    if (digitalRead(SwitchPin6) == HIGH && SwitchState_6 == HIGH) {
    digitalWrite(RelayPin6, HIGH);
    toggleState_6 = 0;
    SwitchState_6 = LOW;
    my_switch6.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_6);
    Serial.println("Switch-6 off");
    }
    if (digitalRead(SwitchPin7) == LOW && SwitchState_7 == LOW) {
    digitalWrite(RelayPin7, LOW);
    toggleState_7 = 1;
    SwitchState_7 = HIGH;
    my_switch7.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_7);
    Serial.println("Switch-7 on");
    }
    if (digitalRead(SwitchPin7) == HIGH && SwitchState_7 == HIGH) {
    digitalWrite(RelayPin7, HIGH);
    toggleState_7 = 0;
    SwitchState_7 = LOW;
    my_switch7.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_7);
    Serial.println("Switch-7 off");
    }
    if (digitalRead(SwitchPin8) == LOW && SwitchState_8 == LOW) {
    digitalWrite(RelayPin8, LOW);
    toggleState_8 = 1;
    SwitchState_8 = HIGH;
    my_switch8.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_8);
    Serial.println("Switch-8 on");
    }
    if (digitalRead(SwitchPin8) == HIGH && SwitchState_8 == HIGH) {
    digitalWrite(RelayPin8, HIGH);
    toggleState_8 = 0;
    SwitchState_8 = LOW;
    my_switch8.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_8);
    Serial.println("Switch-8 off");
    }
    }
    void setup()
    {
    uint32_t chipId = 0;

    Serial.begin(115200);

    // Set the Relays GPIOs as output mode
    pinMode(RelayPin1, OUTPUT);
    pinMode(RelayPin2, OUTPUT);
    pinMode(RelayPin3, OUTPUT);
    pinMode(RelayPin4, OUTPUT);
    pinMode(RelayPin5, OUTPUT);
    pinMode(RelayPin6, OUTPUT);
    pinMode(RelayPin7, OUTPUT);
    pinMode(RelayPin8, OUTPUT);
    pinMode(wifiLed, OUTPUT);

    // Configure the input GPIOs
    pinMode(SwitchPin1, INPUT_PULLUP);
    pinMode(SwitchPin2, INPUT_PULLUP);
    pinMode(SwitchPin3, INPUT_PULLUP);
    pinMode(SwitchPin4, INPUT_PULLUP);
    pinMode(SwitchPin5, INPUT_PULLUP);
    pinMode(SwitchPin6, INPUT_PULLUP);
    pinMode(SwitchPin7, INPUT_PULLUP);
    pinMode(SwitchPin8, INPUT_PULLUP);
    pinMode(gpio_reset, INPUT);

    // Write to the GPIOs the default state on booting
    digitalWrite(RelayPin1, !toggleState_1);
    digitalWrite(RelayPin2, !toggleState_2);
    digitalWrite(RelayPin3, !toggleState_3);
    digitalWrite(RelayPin4, !toggleState_4);
    digitalWrite(RelayPin5, !toggleState_5);
    digitalWrite(RelayPin6, !toggleState_6);
    digitalWrite(RelayPin7, !toggleState_7);
    digitalWrite(RelayPin8, !toggleState_8);
    digitalWrite(wifiLed, LOW);
    Node my_node;
    my_node = RMaker.initNode("ESP32_Relay_8");
    //Standard switch device
    my_switch1.addCb(write_callback);
    my_switch2.addCb(write_callback);
    my_switch3.addCb(write_callback);
    my_switch4.addCb(write_callback);
    my_switch5.addCb(write_callback);
    my_switch6.addCb(write_callback);
    my_switch7.addCb(write_callback);
    my_switch8.addCb(write_callback);
    //Add switch device to the node
    my_node.addDevice(my_switch1);
    my_node.addDevice(my_switch2);
    my_node.addDevice(my_switch3);
    my_node.addDevice(my_switch4);
    my_node.addDevice(my_switch5);
    my_node.addDevice(my_switch6);
    my_node.addDevice(my_switch7);
    my_node.addDevice(my_switch8);
    //This is optional
    RMaker.enableOTA(OTA_USING_PARAMS);
    //If you want to enable scheduling, set time zone for your region using setTimeZone().
    //The list of available values are provided here https://rainmaker.espressif.com/docs/time-service.html
    // RMaker.setTimeZone("Asia/Shanghai");
    // Alternatively, enable the Timezone service and let the phone apps set the appropriate timezone
    RMaker.enableTZService();
    RMaker.enableSchedule();
    //Service Name
    for(int i=0; i<17; i=i+8) {
    chipId |= ((ESP.getEfuseMac() >> (40 - i)) & 0xff) << i;
    }
    Serial.printf("\nChip ID: %d Service Name: %s\n", chipId, service_name);
    Serial.printf("\nStarting ESP-RainMaker\n");
    RMaker.start();
    WiFi.onEvent(sysProvEvent);
    #if CONFIG_IDF_TARGET_ESP32
    WiFiProv.beginProvision(WIFI_PROV_SCHEME_BLE, WIFI_PROV_SCHEME_HANDLER_FREE_BTDM, WIFI_PROV_SECURITY_1, pop, service_name);
    #else
    WiFiProv.beginProvision(WIFI_PROV_SCHEME_SOFTAP, WIFI_PROV_SCHEME_HANDLER_NONE, WIFI_PROV_SECURITY_1, pop, service_name);
    endif
    my_switch1.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, false);
    my_switch2.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, false);
    my_switch3.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, false);
    my_switch4.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, false);
    my_switch5.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, false);
    my_switch6.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, false);
    my_switch7.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, false);
    my_switch8.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, false);
    }
    void loop()
    {
    // Read GPIO0 (external button to reset device
    if(digitalRead(gpio_reset) == LOW) { //Push button pressed
    Serial.printf("Reset Button Pressed!\n");
    // Key debounce handling
    delay(100);
    int startTime = millis();
    while(digitalRead(gpio_reset) == LOW) delay(50);
    int endTime = millis();
    if ((endTime - startTime) > 10000) {
    // If key pressed for more than 10secs, reset all
    Serial.printf("Reset to factory.\n");
    RMakerFactoryReset(2);
    } else if ((endTime - startTime) > 3000) {
    Serial.printf("Reset Wi-Fi.\n");
    // If key pressed for more than 3secs, but less than 10, reset Wi-Fi
    RMakerWiFiReset(2);
    }
    }
    delay(100);
    if (WiFi.status() != WL_CONNECTED)
    {
    //Serial.println("WiFi Not Connected");
    digitalWrite(wifiLed, false);
    }
    else
    {
    //Serial.println("WiFi Connected");
    digitalWrite(wifiLed, true);
    }
    manual_control();
    }

    دیدگاه


      #3
      نوشته اصلی توسط pariseiran نمایش پست ها
      اولین تجربه
      برد esp32
      ماژول رله 8 تایی
      8 تا پیریز رو کار +سیم جامپر + اداپتور جهت تامین برق برد و ماژول

      روی برد فریم ور https://tasmota.github.io/install رو انلاین نصب میکنی و فقط بهش خروجی هارو میدی تمام
      به صورت وحشتناکی اسون هست و تو کمتر از 15 دقیقه 8 تاپیریز رو هوشمند کردم رابط کاربری اندروید و ای او اس هم داره
      تنها بدی داستان لوکال بودنه و از اینترنت نمیشد کنترل کرد یه سری راه حل داره مثل استفاده از اسپیکر امازون و ...
      ضعف بعدی که کمی رو مخ بود با هربار برق رفتن ای پی ادرس لوکال تغییر میکرد و کمی به دردسر میوفتادی تو یافتن ای پی جدید
      ولی در کل حتی یک نصفه خط کد نویسی هم انجام ندادم


      تجربه دوم :
      برد esp32
      ماژول رله 8 تایی
      8 تا پیریز رو کار +سیم جامپر + اداپتور جهت تامین برق برد و ماژول​
      کلی روش بود که esprainmaker بیشتر از همه رو مخم بود میخواستم انجامش بدم ولی نرم افزار ارداینو واقعا ایرادات خیلی مذخرفی میگرفت (اینم بگم این وسط که چنتا روش دیگه هم رفتم مثل سینریک و کادیو و... که یه سری ایرادات ضعف داشت که حتی اگر موفق میشدم به انجامش به دردم نمیخورد برا همین بیشتر چسبیدم به این رینمیکر)
      این روش رو کمی جامع توضیح میدم شاید به دردتون بخوره من تو اوقات بیکاری تازگیا خیلی تو انجمن میچرخم واس یادگیری خودم البته حالا اینوسط بتونیم چهارتا چیز بهم یاد بدیم عالی میشه قیمت یه رله هوشمند حدود 400 تومنه ولی این 8 تا پیریز با تمام ماژول و.. از سایت ها تهیه کردم چنتاش از همین فروشگاه بود و وسایلی که از قبل داشتم حدود 700-800 بیشتر هزینه نشد
      بزرگترین مشکل مربوط به پر بودم حافظه esp32 هست قبل هرکاری با ادرس زیر یه فکتوری ریست بزنید یا فریم ور رو اپدیت کنید


      از نرم افزار اردوینو موقع فلش کردن اپلود تیک رین مرکر رو بزنید
      بارکد تولید شده تو مرحله نهایی ممکنخ بار اول اسکن نشه چند باری باید تست کنید تا بره جلو
      اینم کد نهایی که باهاش جواب گرفتم 8 تا پیریز با 8 تا سویچ یا کلید برای مواقعی که اینترنت قطع هست یا نیاز دارید فیزیکی روشن خاموش کنید

      include <RMaker.h>
      include <RMakerDevice.h>
      include <RMakerNode.h>
      include <RMakerParam.h>
      include <RMakerQR.h>
      include <RMakerType.h>
      include <RMakerUtils.h>
      /************************************************** ********************************
      include "RMaker.h"
      include "WiFi.h"
      include "WiFiProv.h"

      const char *service_name = "pariseiran";
      const char *pop = "1234567";
      // define the Device Names
      char deviceName_1[] = "Switch1";
      char deviceName_2[] = "Switch2";
      char deviceName_3[] = "Switch3";
      char deviceName_4[] = "Switch4";
      char deviceName_5[] = "Switch5";
      char deviceName_6[] = "Switch6";
      char deviceName_7[] = "Switch7";
      char deviceName_8[] = "Switch8";
      // define the GPIO connected with Relays and switches
      static uint8_t RelayPin1 = 23; //D23
      static uint8_t RelayPin2 = 22; //D22
      static uint8_t RelayPin3 = 21; //D21
      static uint8_t RelayPin4 = 19; //D19
      static uint8_t RelayPin5 = 18; //D18
      static uint8_t RelayPin6 = 5; //D5
      static uint8_t RelayPin7 = 25; //D25
      static uint8_t RelayPin8 = 26; //D26
      static uint8_t SwitchPin1 = 13; //D13
      static uint8_t SwitchPin2 = 12; //D12
      static uint8_t SwitchPin3 = 14; //D14
      static uint8_t SwitchPin4 = 27; //D27
      static uint8_t SwitchPin5 = 33; //D33
      static uint8_t SwitchPin6 = 32; //D32
      static uint8_t SwitchPin7 = 15; //D15
      static uint8_t SwitchPin8 = 4; //D4
      static uint8_t wifiLed = 2; //D2
      static uint8_t gpio_reset = 0;
      /* Variable for reading pin status*/
      // Relay State
      bool toggleState_1 = LOW; //Define integer to remember the toggle state for relay 1
      bool toggleState_2 = LOW; //Define integer to remember the toggle state for relay 2
      bool toggleState_3 = LOW; //Define integer to remember the toggle state for relay 3
      bool toggleState_4 = LOW; //Define integer to remember the toggle state for relay 4
      bool toggleState_5 = LOW; //Define integer to remember the toggle state for relay 5
      bool toggleState_6 = LOW; //Define integer to remember the toggle state for relay 6
      bool toggleState_7 = LOW; //Define integer to remember the toggle state for relay 7
      bool toggleState_8 = LOW; //Define integer to remember the toggle state for relay 8
      // Switch State
      bool SwitchState_1 = LOW;
      bool SwitchState_2 = LOW;
      bool SwitchState_3 = LOW;
      bool SwitchState_4 = LOW;
      bool SwitchState_5 = LOW;
      bool SwitchState_6 = LOW;
      bool SwitchState_7 = LOW;
      bool SwitchState_8 = LOW;
      //The framework provides some standard device types like switch, lightbulb, fan, temperature sensor.
      static Switch my_switch1(deviceName_1, &RelayPin1);
      static Switch my_switch2(deviceName_2, &RelayPin2);
      static Switch my_switch3(deviceName_3, &RelayPin3);
      static Switch my_switch4(deviceName_4, &RelayPin4);
      static Switch my_switch5(deviceName_5, &RelayPin5);
      static Switch my_switch6(deviceName_6, &RelayPin6);
      static Switch my_switch7(deviceName_7, &RelayPin7);
      static Switch my_switch8(deviceName_8, &RelayPin8);
      void sysProvEvent(arduino_event_t *sys_event)
      {
      switch (sys_event->event_id) {
      case ARDUINO_EVENT_PROV_START:
      #if CONFIG_IDF_TARGET_ESP32
      Serial.printf("\nProvisioning Started with name "%s" and PoP "%s" on BLE\n", service_name, pop);
      printQR(service_name, pop, "ble");
      #else
      Serial.printf("\nProvisioning Started with name "%s" and PoP "%s" on SoftAP\n", service_name, pop);
      printQR(service_name, pop, "softap");
      endif
      break;
      case ARDUINO_EVENT_WIFI_STA_CONNECTED:
      Serial.printf("\nConnected to Wi-Fi!\n");
      digitalWrite(wifiLed, true);
      break;
      }
      }
      void write_callback(Device *device, Param *param, const param_val_t val, void *priv_data, write_ctx_t *ctx)
      {
      const char *device_name = device->getDeviceName();
      const char *param_name = param->getParamName();
      if(strcmp(device_name, deviceName_1) == 0) {

      Serial.printf("Lightbulb = %s\n", val.val.b? "true" : "false");

      if(strcmp(param_name, "Power") == 0) {
      Serial.printf("Received value = %s for %s - %s\n", val.val.b? "true" : "false", device_name, param_name);
      toggleState_1 = val.val.b;
      (toggleState_1 == false) ? digitalWrite(RelayPin1, HIGH) : digitalWrite(RelayPin1, LOW);
      param->updateAndReport(val);
      }

      } else if(strcmp(device_name, deviceName_2) == 0) {

      Serial.printf("Switch value = %s\n", val.val.b? "true" : "false");
      if(strcmp(param_name, "Power") == 0) {
      Serial.printf("Received value = %s for %s - %s\n", val.val.b? "true" : "false", device_name, param_name);
      toggleState_2 = val.val.b;
      (toggleState_2 == false) ? digitalWrite(RelayPin2, HIGH) : digitalWrite(RelayPin2, LOW);
      param->updateAndReport(val);
      }

      } else if(strcmp(device_name, deviceName_3) == 0) {

      Serial.printf("Switch value = %s\n", val.val.b? "true" : "false");
      if(strcmp(param_name, "Power") == 0) {
      Serial.printf("Received value = %s for %s - %s\n", val.val.b? "true" : "false", device_name, param_name);
      toggleState_3 = val.val.b;
      (toggleState_3 == false) ? digitalWrite(RelayPin3, HIGH) : digitalWrite(RelayPin3, LOW);
      param->updateAndReport(val);
      }

      } else if(strcmp(device_name, deviceName_4) == 0) {

      Serial.printf("Switch value = %s\n", val.val.b? "true" : "false");
      if(strcmp(param_name, "Power") == 0) {
      Serial.printf("Received value = %s for %s - %s\n", val.val.b? "true" : "false", device_name, param_name);
      toggleState_4 = val.val.b;
      (toggleState_4 == false) ? digitalWrite(RelayPin4, HIGH) : digitalWrite(RelayPin4, LOW);
      param->updateAndReport(val);
      }

      } else if(strcmp(device_name, deviceName_5) == 0) {

      Serial.printf("Lightbulb = %s\n", val.val.b? "true" : "false");

      if(strcmp(param_name, "Power") == 0) {
      Serial.printf("Received value = %s for %s - %s\n", val.val.b? "true" : "false", device_name, param_name);
      toggleState_5 = val.val.b;
      (toggleState_5 == false) ? digitalWrite(RelayPin5, HIGH) : digitalWrite(RelayPin5, LOW);
      param->updateAndReport(val);
      }

      } else if(strcmp(device_name, deviceName_6) == 0) {

      Serial.printf("Switch value = %s\n", val.val.b? "true" : "false");
      if(strcmp(param_name, "Power") == 0) {
      Serial.printf("Received value = %s for %s - %s\n", val.val.b? "true" : "false", device_name, param_name);
      toggleState_6 = val.val.b;
      (toggleState_6 == false) ? digitalWrite(RelayPin6, HIGH) : digitalWrite(RelayPin6, LOW);
      param->updateAndReport(val);
      }

      } else if(strcmp(device_name, deviceName_7) == 0) {

      Serial.printf("Switch value = %s\n", val.val.b? "true" : "false");
      if(strcmp(param_name, "Power") == 0) {
      Serial.printf("Received value = %s for %s - %s\n", val.val.b? "true" : "false", device_name, param_name);
      toggleState_7 = val.val.b;
      (toggleState_7 == false) ? digitalWrite(RelayPin7, HIGH) : digitalWrite(RelayPin7, LOW);
      param->updateAndReport(val);
      }

      } else if(strcmp(device_name, deviceName_8) == 0) {

      Serial.printf("Switch value = %s\n", val.val.b? "true" : "false");
      if(strcmp(param_name, "Power") == 0) {
      Serial.printf("Received value = %s for %s - %s\n", val.val.b? "true" : "false", device_name, param_name);
      toggleState_8 = val.val.b;
      (toggleState_8 == false) ? digitalWrite(RelayPin8, HIGH) : digitalWrite(RelayPin8, LOW);
      param->updateAndReport(val);
      }
      }
      }
      void manual_control()
      {
      if (digitalRead(SwitchPin1) == LOW && SwitchState_1 == LOW) {
      digitalWrite(RelayPin1, LOW);
      toggleState_1 = 1;
      SwitchState_1 = HIGH;
      my_switch1.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_1);
      Serial.println("Switch-1 on");
      }
      if (digitalRead(SwitchPin1) == HIGH && SwitchState_1 == HIGH) {
      digitalWrite(RelayPin1, HIGH);
      toggleState_1 = 0;
      SwitchState_1 = LOW;
      my_switch1.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_1);
      Serial.println("Switch-1 off");
      }
      if (digitalRead(SwitchPin2) == LOW && SwitchState_2 == LOW) {
      digitalWrite(RelayPin2, LOW);
      toggleState_2 = 1;
      SwitchState_2 = HIGH;
      my_switch2.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_2);
      Serial.println("Switch-2 on");
      }
      if (digitalRead(SwitchPin2) == HIGH && SwitchState_2 == HIGH) {
      digitalWrite(RelayPin2, HIGH);
      toggleState_2 = 0;
      SwitchState_2 = LOW;
      my_switch2.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_2);
      Serial.println("Switch-2 off");
      }
      if (digitalRead(SwitchPin3) == LOW && SwitchState_3 == LOW) {
      digitalWrite(RelayPin3, LOW);
      toggleState_3 = 1;
      SwitchState_3 = HIGH;
      my_switch3.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_3);
      Serial.println("Switch-3 on");
      }
      if (digitalRead(SwitchPin3) == HIGH && SwitchState_3 == HIGH) {
      digitalWrite(RelayPin3, HIGH);
      toggleState_3 = 0;
      SwitchState_3 = LOW;
      my_switch3.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_3);
      Serial.println("Switch-3 off");
      }
      if (digitalRead(SwitchPin4) == LOW && SwitchState_4 == LOW) {
      digitalWrite(RelayPin4, LOW);
      toggleState_4 = 1;
      SwitchState_4 = HIGH;
      my_switch4.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_4);
      Serial.println("Switch-4 on");
      }
      if (digitalRead(SwitchPin4) == HIGH && SwitchState_4 == HIGH) {
      digitalWrite(RelayPin4, HIGH);
      toggleState_4 = 0;
      SwitchState_4 = LOW;
      my_switch4.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_4);
      Serial.println("Switch-4 off");
      }
      if (digitalRead(SwitchPin5) == LOW && SwitchState_5 == LOW) {
      digitalWrite(RelayPin5, LOW);
      toggleState_5 = 1;
      SwitchState_5 = HIGH;
      my_switch5.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_5);
      Serial.println("Switch-5 on");
      }
      if (digitalRead(SwitchPin5) == HIGH && SwitchState_5 == HIGH) {
      digitalWrite(RelayPin5, HIGH);
      toggleState_5 = 0;
      SwitchState_5 = LOW;
      my_switch5.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_5);
      Serial.println("Switch-5 off");
      }
      if (digitalRead(SwitchPin6) == LOW && SwitchState_6 == LOW) {
      digitalWrite(RelayPin6, LOW);
      toggleState_6 = 1;
      SwitchState_6 = HIGH;
      my_switch6.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_6);
      Serial.println("Switch-6 on");
      }
      if (digitalRead(SwitchPin6) == HIGH && SwitchState_6 == HIGH) {
      digitalWrite(RelayPin6, HIGH);
      toggleState_6 = 0;
      SwitchState_6 = LOW;
      my_switch6.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_6);
      Serial.println("Switch-6 off");
      }
      if (digitalRead(SwitchPin7) == LOW && SwitchState_7 == LOW) {
      digitalWrite(RelayPin7, LOW);
      toggleState_7 = 1;
      SwitchState_7 = HIGH;
      my_switch7.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_7);
      Serial.println("Switch-7 on");
      }
      if (digitalRead(SwitchPin7) == HIGH && SwitchState_7 == HIGH) {
      digitalWrite(RelayPin7, HIGH);
      toggleState_7 = 0;
      SwitchState_7 = LOW;
      my_switch7.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_7);
      Serial.println("Switch-7 off");
      }
      if (digitalRead(SwitchPin8) == LOW && SwitchState_8 == LOW) {
      digitalWrite(RelayPin8, LOW);
      toggleState_8 = 1;
      SwitchState_8 = HIGH;
      my_switch8.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_8);
      Serial.println("Switch-8 on");
      }
      if (digitalRead(SwitchPin8) == HIGH && SwitchState_8 == HIGH) {
      digitalWrite(RelayPin8, HIGH);
      toggleState_8 = 0;
      SwitchState_8 = LOW;
      my_switch8.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, toggleState_8);
      Serial.println("Switch-8 off");
      }
      }
      void setup()
      {
      uint32_t chipId = 0;

      Serial.begin(115200);

      // Set the Relays GPIOs as output mode
      pinMode(RelayPin1, OUTPUT);
      pinMode(RelayPin2, OUTPUT);
      pinMode(RelayPin3, OUTPUT);
      pinMode(RelayPin4, OUTPUT);
      pinMode(RelayPin5, OUTPUT);
      pinMode(RelayPin6, OUTPUT);
      pinMode(RelayPin7, OUTPUT);
      pinMode(RelayPin8, OUTPUT);
      pinMode(wifiLed, OUTPUT);

      // Configure the input GPIOs
      pinMode(SwitchPin1, INPUT_PULLUP);
      pinMode(SwitchPin2, INPUT_PULLUP);
      pinMode(SwitchPin3, INPUT_PULLUP);
      pinMode(SwitchPin4, INPUT_PULLUP);
      pinMode(SwitchPin5, INPUT_PULLUP);
      pinMode(SwitchPin6, INPUT_PULLUP);
      pinMode(SwitchPin7, INPUT_PULLUP);
      pinMode(SwitchPin8, INPUT_PULLUP);
      pinMode(gpio_reset, INPUT);

      // Write to the GPIOs the default state on booting
      digitalWrite(RelayPin1, !toggleState_1);
      digitalWrite(RelayPin2, !toggleState_2);
      digitalWrite(RelayPin3, !toggleState_3);
      digitalWrite(RelayPin4, !toggleState_4);
      digitalWrite(RelayPin5, !toggleState_5);
      digitalWrite(RelayPin6, !toggleState_6);
      digitalWrite(RelayPin7, !toggleState_7);
      digitalWrite(RelayPin8, !toggleState_8);
      digitalWrite(wifiLed, LOW);
      Node my_node;
      my_node = RMaker.initNode("ESP32_Relay_8");
      //Standard switch device
      my_switch1.addCb(write_callback);
      my_switch2.addCb(write_callback);
      my_switch3.addCb(write_callback);
      my_switch4.addCb(write_callback);
      my_switch5.addCb(write_callback);
      my_switch6.addCb(write_callback);
      my_switch7.addCb(write_callback);
      my_switch8.addCb(write_callback);
      //Add switch device to the node
      my_node.addDevice(my_switch1);
      my_node.addDevice(my_switch2);
      my_node.addDevice(my_switch3);
      my_node.addDevice(my_switch4);
      my_node.addDevice(my_switch5);
      my_node.addDevice(my_switch6);
      my_node.addDevice(my_switch7);
      my_node.addDevice(my_switch8);
      //This is optional
      RMaker.enableOTA(OTA_USING_PARAMS);
      //If you want to enable scheduling, set time zone for your region using setTimeZone().
      //The list of available values are provided here https://rainmaker.espressif.com/docs/time-service.html
      // RMaker.setTimeZone("Asia/Shanghai");
      // Alternatively, enable the Timezone service and let the phone apps set the appropriate timezone
      RMaker.enableTZService();
      RMaker.enableSchedule();
      //Service Name
      for(int i=0; i<17; i=i+8) {
      chipId |= ((ESP.getEfuseMac() >> (40 - i)) & 0xff) << i;
      }
      Serial.printf("\nChip ID: %d Service Name: %s\n", chipId, service_name);
      Serial.printf("\nStarting ESP-RainMaker\n");
      RMaker.start();
      WiFi.onEvent(sysProvEvent);
      #if CONFIG_IDF_TARGET_ESP32
      WiFiProv.beginProvision(WIFI_PROV_SCHEME_BLE, WIFI_PROV_SCHEME_HANDLER_FREE_BTDM, WIFI_PROV_SECURITY_1, pop, service_name);
      #else
      WiFiProv.beginProvision(WIFI_PROV_SCHEME_SOFTAP, WIFI_PROV_SCHEME_HANDLER_NONE, WIFI_PROV_SECURITY_1, pop, service_name);
      endif
      my_switch1.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, false);
      my_switch2.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, false);
      my_switch3.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, false);
      my_switch4.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, false);
      my_switch5.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, false);
      my_switch6.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, false);
      my_switch7.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, false);
      my_switch8.updateAndReportParam(ESP_RMAKER_DEF_POW ER_NAME, false);
      }
      void loop()
      {
      // Read GPIO0 (external button to reset device
      if(digitalRead(gpio_reset) == LOW) { //Push button pressed
      Serial.printf("Reset Button Pressed!\n");
      // Key debounce handling
      delay(100);
      int startTime = millis();
      while(digitalRead(gpio_reset) == LOW) delay(50);
      int endTime = millis();
      if ((endTime - startTime) > 10000) {
      // If key pressed for more than 10secs, reset all
      Serial.printf("Reset to factory.\n");
      RMakerFactoryReset(2);
      } else if ((endTime - startTime) > 3000) {
      Serial.printf("Reset Wi-Fi.\n");
      // If key pressed for more than 3secs, but less than 10, reset Wi-Fi
      RMakerWiFiReset(2);
      }
      }
      delay(100);
      if (WiFi.status() != WL_CONNECTED)
      {
      //Serial.println("WiFi Not Connected");
      digitalWrite(wifiLed, false);
      }
      else
      {
      //Serial.println("WiFi Connected");
      digitalWrite(wifiLed, true);
      }
      manual_control();
      }
      این مدارو خودتون تست کردید و نتیجه گرفتید ؟منم میخوام شرو کنم اگر پیشنهادی دارید بفرمایید

      دیدگاه


        #4
        نوشته اصلی توسط LINUX2017 نمایش پست ها

        این مدارو خودتون تست کردید و نتیجه گرفتید ؟منم میخوام شرو کنم اگر پیشنهادی دارید بفرمایید
        بله مدار که نیست یه برد اماده هست برنامه نویسی هم انچنان لازم نداره در حد خیلی مبتدی کافیه خیلی هم ارزونه فعلا با ۸ تا پیریز رو هوشمند کردم

        دیدگاه

        لطفا صبر کنید...
        X