Как отправить информацию с сайта на ардуино?

В настоящее время у меня есть Arduino Mega + Arduino Ethernet shield, я хотел бы знать, возможно ли отправлять данные на arduino с веб-сайта, размещенного на самом shield. Так что, когда кто-то нажимает кнопку на веб-сайте, он посылает сигнал на arduino для запуска действия. Не мог бы кто-нибудь любезно мне помочь?

, 👍2

Обсуждение

Вы пробовали ввести этот вопрос в Google? Есть много, много примеров того, как это делается., @Mark Smith

@MarkSmith Нет особого способа, которым я пытаюсь, и я попробовал стек, так как он удобен для меня по сравнению с Google, который приведет меня к спам-сайтам, но я не нашел свой ответ в Google, он не был точным., @The Little Cousin


1 ответ


Лучший ответ:

3

Да, конечно!

Перво-наперво - Да, это возможно сделать так, как вы думаете.

Идея состоит в том, чтобы создать сервер на Ethernet Shield и открыть веб-страницу, размещенную на нем, на любом устройстве, и на основе параметров, выбранных на веб-странице, мы можем запускать нужные действия на Arduino.

Я изменил код веб-сервера встроенных примеров Arduino в соответствии с вашими требованиями, просто загрузите его и внесите необходимые изменения по мере необходимости, вот оно-

#include<SPI.h>
#include<Ethernet.h>

byte mac[] = {
   0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02
 };


 IPAddress ip(192,168,1,199); // Любой IP-адрес, не входящий в вашу сеть.
 EthernetServer server(80);   // Порт 80 используется по умолчанию для http.

  int led=2;

  String request;



  void setup(){
    Ethernet.begin(mac,ip);
    pinMode(led,OUTPUT);
    Serial.begin(9600);
   }



  void loop(){

      EthernetClient client = server.available();
  if(client)
         {
       Serial.println("Client is trying to connect......");
       while(client.connected())
       {
  if(client.available())
  {
    char c = client.read();
    request.concat(c);
    if(c=='\n'){
    Serial.print(request);
    if(request.indexOf("ON")>0){
      digitalWrite(led,HIGH);
      Serial.println("ON");
      }

      else if(request.indexOf("OFF")>0){
        digitalWrite(led,LOW);
        Serial.println("OFF");
        }
    client.println("HTTP/1.1 200 OK");
    client.println("Content-Type: text/html");
    //client.println("Обновить: 5"); // обновляйте страницу автоматически каждые 5 секунд
    client.println();

    client.println("<!doctype html>");
    client.println("<html>");
    client.println("<head><title>LED</title></head>");
    client.print("<!DOCTYPE HTML><html><body ><a href ='/?LED_ON'><p style = ' text-align:center'>LED ON</p></a><br><a href ='/?LED_OFF'><p style = ' text-align:center'>LED OFF</P></a><br></body></html>" );
    client.println("</html>");
    client.stop();
    request="";
    
  }
  }
 }
  
    }


   }

Этот скетч включит или выключит светодиод, подключенный к цифровому контакту 2.

Вы должны перейти на IP-адрес, который вы предоставляете щиту (192.168.1.199 в моем случае). Вы увидите 2 гиперссылки для включения или выключения светодиода, и это передаст запрос, который Arduino снова и снова ищет в цикле и выполняет соответствующие действия.

Надеюсь, это поможет, попробуйте это и дайте мне знать о результате.

ПРИМЕЧАНИЕ

Убедитесь, что вы получаете доступ к Ethernet Shield только с устройства в вашей локальной сети, в противном случае вам придется использовать переадресацию портов.

,

Все работает нормально, но я не знаю, возможно ли иметь другой файл на SD-карте в HTML и CSS, чтобы делать то же самое. Вместо того, чтобы иметь целую веб-страницу в самом скетче., @The Little Cousin

Очевидно, что это возможно! Дай мне день или два, я помогу тебе, @Manav

Единственным ограничением для приложений Arduino является воображение пользователя! :), @Manav

Я полностью согласен :D Я всегда так говорю :D 8, @The Little Cousin

На самом деле я понял, что вы здесь делаете, вы используете URL-адрес, чтобы определить, включен ли светодиод, но мне нужен способ, с помощью которого я могу общаться с arduino через интерфейс веб-сайта, отправляя и получая информацию., @The Little Cousin

Вот что это такое. Процесс анализа URL-адреса включает в себя оператор запроса ('?'), этот оператор возьмет нашу ссылку и поместит ее в URL-адрес в том же домене (IP в нашем случае) и когда сервер (Arduino) получает запрос, он соответствующим образом переключает светодиод., @Manav

Хум, нет другого способа, такого как Serial, для связи с arduino из веб-интерфейса., @The Little Cousin

Давайте [продолжим это обсуждение в чате](http://chat.stackexchange.com/rooms/51114/discussion-between-the-little-cousin-and-manav)., @The Little Cousin

https://startingelectronics.org/tutorials/arduino/arduino-MEGA-24-output-web-server/ Я нашел эту статью. Они сделали почти то же самое, используя Ajax., @The Little Cousin