1. Chú ý: Các bạn nên tham khảo Nội quy trước khi viết bài (click vào liên kết bên dưới).
    * Nội quy và Thông báo diễn đàn CNCProVN.com
    * Nếu bạn thấy hứng thú với bài viết. Hãy dùng chức năng Share to facebook để chia sẻ bài viết lên facebook.

          
Kết quả 1 đến 6 của 6

Chủ đề: ESP8266 - dùng Blynk tắt mở theo điều kiện thời gian (time schedule)

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Thợ bậc 6 CKD's Avatar
    Ngày tham gia
    Nov 2013
    Bài viết
    6,680
    Cám ơn
    1,733
    Được cám ơn 5,322 lần
           ở 2,595 bài viết

    Question ESP8266 - dùng Blynk tắt mở theo điều kiện thời gian (time schedule)

    Chào các bạn!
    Rất lâu rồi mới quay lại viết bài trên diễn đàn. Vì đã lâu không tham gia vào việc chế cháo cnc nên cũng không biết phải trao đổi thêm những gì.

    Nay viết bài này cũng không liên quan gì đến CNC, mượn phòng Arduino để trao đổi/chia sẻ về việc lập trình ESP8266 một dự án mà mình có chia sẻ video trên youtube.

    Nhu cầu là dùng ESP8266, lập lịch hẹn và tắt mở (relay chẵng hạn) theo lịch đã được lập trước đó.



    Mô tả:

    1. Lập trình Arduino, dùng phần cứng ESP8266. Kết nối qua wifi đến máy chủ Blynk.
    2. Đăng ký tài khoản Blynk, tạo dự án mới (New Project), trong dự án đó có thêm vào
    • RTC (xem link) đã được config đúng múi giờ.
      Click vào ảnh để xem ảnh lớn hơn. 

Name:	rtc_edit.png 
Views:	1 
Size:	33.8 KB 
ID:	78234
    • Time Input (xem link), tùy nhu cầu mà cài đặt, phần OUPUT đặt cho nó một Virtual PIN mà bạn muốn. Lưu ý xem thêm ấy cái ví dụ (VD 1, VD 2, VD 3)
    • Thêm các Widgets hay ABC XYZ gì đó tùy bạn muốn.

    3. Lập trình trên giao diện IDE cùa Arduino. Mấy phần khai báo, sử dụng, kết nối wifi, kết nối Blynk các bạn tự tham khảo thêm trên internet. Mình sẽ chỉ chi sẽ phần xử lý thời gian (time chedule) cho nó ngắn gọn.
    Khai báo sử dụng thư viện, có 2 thư viện cần cho việc này: WidgetRTC.h và TimeLib.h (xem link), ngoài ra còn các thư viện khác để có thể sử dụng ESP8266 và Blynk, các bạn tự thêm vào
    Mã:
    // khai báo biến cần dùng
    unsigned int TimeStart, TimeStop;
    byte dayStartSelect = 0;
    byte dayStopSelect  = 0;
    
    // timeInput là Virtual PIN mà mình đã setting trong dự án Blynk
    // đoạn chương trình bên dưới sẽ tự động làm việc mỗi khi có sự thay đổi Time Input trên app Blynk
    
    BLYNK_WRITE(timeInput)
    {
      TimeInputParam t(param); //blynk-library/src/WidgetTimeInput.h
    
      // Process start time
      if (t.hasStartTime())
      {
        TimeStart = t.getStartHour()*60 + t.getStartMinute();     
      }
      else TimeStart = 0;
    
      // Process stop time
    
      if (t.hasStopTime())
      {
        TimeStop = t.getStopHour()*60 + t.getStopMinute();
      }
      else TimeStop = 0;
      
      // Process Blynk TimeInput weekdays (1. Mon, 2. Tue, 3. Wed, 4. Thu, 5. Fri, 6. Sat, 7. Sun)
      // Process RTC weekday();           (1. Sun, 2. Mon, 3. Tue, 4. Wed, 5. Thu, 6. Fri, 7. Sat) 
      // Bit dayStart/StopSelect  (0. None 1. Sun, 2. Mon, 3. Tue, 4. Wed, 5. Thu, 6. Fri, 7. Sat)
      dayStartSelect = 0;
      dayStopSelect  = 0;
      for (int i = 1; i <= 7; i++)
      {
        if (t.isWeekdaySelected(i))
        {
          if (i == 7)        bitWrite(dayStartSelect, 1,   1);
          else               bitWrite(dayStartSelect, i+1, 1);
          if (TimeStop < Time1Start)
            if (i == 6)      bitWrite(dayStopSelect,  1,   1);
            else if (i == 7) bitWrite(dayStopSelect,  2,   1);
            else             bitWrite(dayStopSelect,  i+2, 1);
          else
            if (i == 7)      bitWrite(dayStopSelect,  1,   1);
            else             bitWrite(dayStopSelect,  i+1, 1);
        }
      }
    }


    Mã:
    // khai báo biến cần dùng
    bool timeOnOff      = false;
    
    // đoạn chương trình sẽ kiểm tra điều kiện và bật/tắt biến timeOnOff
    
    void TimeAuto()
    {
      unsigned int times = hour()*60 + minute();
      byte today = weekday(); //the weekday now (Sunday is day 1, Monday is day 2) 
    
      if (bitRead(dayStartSelect, today))
      {
        if (TimeStart == TimeStop)    timeOnOff = false;
        else if (TimeStart <=  times) timeOnOff = true;    
      }
      if (bitRead(dayStopSelect,  today))
      {
        if ((TimeStart < TimeStop ) && (TimeStop <= times))                                     timeOnOff = false;
        if ((TimeStop  < TimeStart) && (TimeStop <= times) && (times < TimeStart))              timeOnOff = false;
        if ((TimeStop  < TimeStart) && !bitRead(dayStartSelect, today) && (TimeStop <= times))  timeOnOff = false;
      }
    }

    void TimeAuto() sẽ đặt vào trong void loop của chương trình chính.
    kiểm tra biến timeOnOff và thực thi công việc tùy theo nhu cầu (tắt mở relay chẵng hạn)

    Chúc các bạn thành công!
    DT: O7837277II - CKD's Youtube Channel - Facebook - Tổng hợp chủ đề
    17 ds 3, Thạnh Mỹ Lợi, Q2, tp.HCM

  2. Có 4 thành viên đã cám ơn CKD cho bài viết hữu ích này:


Các Chủ đề tương tự

  1. Trả lời: 6
    Bài viết cuối: 06-12-2019, 05:47:05 AM
  2. Trả lời: 1
    Bài viết cuối: 31-08-2017, 06:54:40 AM
  3. Mach3 - ToolPath On/Off - giảm thời gian Load file khi chạy 3D
    Bởi CKD trong diễn đàn Phần mềm CAD, CAM và các tiện ích
    Trả lời: 2
    Bài viết cuối: 07-08-2017, 09:54:17 PM
  4. Xin hỏi. tính toán thời gian gia công GCode
    Bởi diepckk25 trong diễn đàn Phần mềm CAD, CAM và các tiện ích
    Trả lời: 1
    Bài viết cuối: 09-06-2017, 10:31:58 PM
  5. Hỏi cách tính thời gian chạy G-code
    Bởi h-d trong diễn đàn Thắc mắc
    Trả lời: 6
    Bài viết cuối: 20-01-2016, 08:33:26 AM

Tag của Chủ đề này

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •