Điều khiển LED từ WebSite thông qua ENC28J60

Thảo luận trong 'IOT' bắt đầu bởi VuPhat.MCA, 27/7/19.

  1. VuPhat.MCA

    VuPhat.MCA New Member

    Nguồn: Nguyễn Quý Nhất

    1. Ý TƯỞNG
    Ý tưởng của mình là sẽ tạo ra một website nhúng vào vi điều khiển, trong website này sẽ có một form chứa trạng thái của 3 LED.
    Khi cần điều khiển LED này, chúng ta cần truy cập vào trang web đã nhúng vào vi điều khiển (thông qua ENC28J60 kết nối với router), một giao diện web sẽ được hiển thị lên trình duyệt web.
    Muốn điều khiển LED nào sáng ( tắt ) ta cần check vào ô ON hoặc OFF tương ứng trên giao diện Web, sau đó ta ấn nút SEND, giá trị điều khiển LED sẽ được trả về vi điều khiển, và công việc của ta là xử lý giá trị và đưa ra tín hiệu điều khiển LED.

    2. THỰC HIỆN
    Thiết kế WebSite điều khiển và nhúng code vào vi điều khiển.

    Chú ý: trong video hướng dẫn trên, các bạn cần chú ý đến đoạn code:
    Mã:
    <form method="post" action="">
    <table border="1">
    <tr>
    <td>LED 1: <br />
    <input type="radio" name="LED1" value="1" />ON<br>
    <input type="radio" name="LED1" value="0" />OFF<br />
    </td>
    <td>LED 2: <br />
    <input type="radio" name="LED2" value="1" />ON<br>
    <input type="radio" name="LED2" value="0" />OFF<br />
    </td>
    <td>LED 3: <br />
    <input type="radio" name="LED3" value="1" />ON<br>
    <input type="radio" name="LED3" value="0" />OFF<br />
    </td>
    </tr>
    </table><br>
    <input type="submit" name="SEND" />
    </form>
    
    Mục đích của đoạn code này là tạo ra một form, có liên quan trực tiếp đến phần xử lý dữ liệu sau này. Khi ta ấn nút SEND, toàn bộ nội dung của form sẽ được đưa về vi điều khiển.
    Ví dụ:
    [​IMG]
    Khi ta ấn Send thì nội dung sau sẽ được đưa về vi điều khiển:
    LED1=1&LED2=1&LED3=1
    [​IMG]
    Khi ta ấn Send thì nội dung sau sẽ được đưa về vi điều khiển:
    LED1=0&LED2=0&LED3=1.
    Khi trang web đã được nhúng vào code, công việc của chúng ta cần làm là xử lý dữ liệu nhận được. Để làm điều đó tôi đã xây dựng hàm tìm một chuỗi kí tự (str1) nằm trong một chuỗi khác (str2), nếu str1 có trong str2 thì trả về vị trí str1 trong str2 ngược lại sẽ trả về độ dài chuỗi str2 (=len).
    Mã:
    uint16_t find_string(uint8_t*str1, uint8_t*str2, uint16_t len)
    {
      uint16_t i = 0, j = 0;
      while (i < len)
      {
        if (str2[i++] != str1[j++])
        {
          j = 0;
        }
        if (str1[j] == 0)
        {
          return (i - j);
        }
        if (str2 == 0)
        {
          return (len);
        }
      }
      return (len);
    }
    
    Để biết được giá trị điều khiển LED1 ta sẽ tìm chuỗi “LED1=” trong nội dung mà trang Web đưa về vi điều khiển (nằm trong bộ đệm EthFrame), Nếu có chuỗi đó trong nội dung được đưa về ta sẽ kiểm tra giá trị của nó và điều khiển LED theo giá trị tương ứng.
    Mã:
    cmd=find_string("LED1=, &EthFrame[data_point], len);
    if (cmd != len)
    {
      if (EthFrame[data_point + cmd + 5] == '1')
      {
        LED1=0;
      }
      if (EthFrame[data_point + cmd + 5] == '0')
      {
        LED1=1;
      }
    }
    
    Ta cũng làm hoàn toàn tương tự đối với LED 2 và LED 3.

    3. KẾT QUẢ
    Và đây là kết quả thực hiện được của mình


    Các bạn có thể doawnload code ở dưới nhé!
    https://drive.google.com/file/d/1EovA19ovSMdMRGNdjcWM_gDYWpIWQDSt/view?usp=sharing
     
    Last edited: 6/9/19

trang này