Щит Ethernet: отправка данных из сети в arduino с использованием HTML-формы

0

Я уже завершил управление устройствами через интернет с помощью кнопок. Я использовал щит Ethernet Arduino Uno+ SD CARD+. Теперь я хочу изменить его так, чтобы он мог отправлять текстовые команды через форму представления, чтобы управлять ими.

Я мог бы это сделать, когда использовал Arduino Uno Memory для HTML-кода, но теперь сталкиваюсь с проблемами при использовании SD-карты для HTML. Ожидание модуля кода для него.

Теги:
arduino
web
ethernet

2 ответа

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

Да, это возможно. Но вам нужно использовать веб-сокет. Я сделал это с помощью PHP. Таким образом, вы создадите страницу с html и php, которая при нажатии кнопки отправки отправит команды. Это должно быть так, в php:

<?php 
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

socket_connect($sock,"ip number of arduino", 8080);

$messsage = '0';
if (isset($_POST['on'])){
    $msg='1';
}
if (isset($_POST['off'])){
    $msg='0';
}

socket_write($sock, $msg);
?>

Поэтому вам просто нужно написать html для отправки метода post при отправке формы.

  • 0
    Есть ли способ сделать это без php? Просто я не могу использовать php на моем сетевом экране. Большое спасибо за ваш ответ!
  • 0
    Но вы не будете использовать php на сетевой экран. Вам понадобится сервер в Интернете. Таким образом, вы будете держать php на сервере, тогда вам просто нужно будет получить к нему доступ. На Arduino у вас будет веб-клиент. Так же, как образцы ARDUINO IDE.
Показать ещё 6 комментариев
1

Представление HTML-формы фактически вызывает метод POST или GET протокола HTTP. Этот протокол является читаемым человеком.

Пример HTTP-запроса из w3schools:

POST /test/demo_form.asp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2

Это то, что вы получите в буфере arduino. Вы можете просто найти шаблон name1 = и прочитать значение и действовать соответствующим образом.

В приведенном ниже примере я читаю значения переменных s и e.

word len = ether.packetReceive();
word pos = ether.packetLoop(len);
if (pos) {
  bfill = ether.tcpOffset();
  char* socket = strstr((char *)Ethernet::buffer + pos, "?s=");


  if(socket != 0){
    byte s = getIntArg(socket, "s");
    byte e = getIntArg(socket, "e");
    Serial.println("Request");
    Serial.println(s);
    Serial.println(e);
    PlanActions(s, e)
    }

Форма для этого запроса выглядит так:

<form action="." method="POST">
    <select name="s" size="1">
        <option value="0">TV</option>
        <option value="1">HiFi</option>
    </select>
    <input name="e" type="submit" value="0">
    <input name="e" type="submit" value="1">
</form>

В примере я отправляю простую страницу формы из arduino, но вы можете иметь страницу, где хотите. Он может быть на локальном компьютере или веб-сервере. Просто измените действие на нечто вроде <form action="arduino-ip"

  • 0
    Просто хочу подчеркнуть, что здесь вы используете arduino в качестве сервера (который может показаться немного отсталым, но просто не думать о сервере как о большой мощной машине). Кроме того, вы действительно хотите делать то, что сказал и обслуживал Якуб вверх на страницу, которая создает get с другого сервера, если вы отправляете много текста из arduino, вам скоро не хватит памяти (в этом случае он просто зависает)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню