Связь между двумя Arduino/MKR1000

Я пытаюсь создать проект в свободное время просто для развлечения - он состоит из двух MKR1000 (один действует как веб-сервер, подключенный к одному ноутбуку, а другой действует как веб-клиент, подключенный к другому ноутбуку, поэтому я могу просматривать серийный монитор).

К одному MKR1000 подключен потенциометр (поэтому я могу изменить его значение), и он отправляет значение потенциометра на последовательный монитор каждые 4 секунды.

ЦЕЛЬ: Как только веб-сервер настроит сеть Wi-Fi, а веб-клиент подключится к этой сети Wi-Fi, я хочу отправлять значение потенциометра веб-клиенту каждый раз, когда он обновляется. . Однако я понятия не имею, как этого добиться.

Это мой код недействительного цикла веб-сервера (остальное похоже на https:/ /www.arduino.cc/en/Tutorial/Wifi101WiFiWebServer):

void loop() {
  WiFiClient client = server.available();
  // прослушивание входящих клиентов
  if (client) {
    // если вы получите клиента,
    Serial.println("new client");
    // вывести сообщение из последовательного порта
    String currentLine = "";
    // создаем строку для хранения входящих данных от клиента
    while (client.connected()) {
      // цикл, пока клиент подключен
      if (client.available()) {
        // если есть байты для чтения от клиента,
        char c = client.read();
        // прочитать байт, затем
        Serial.write(c);
        // вывести его на серийный монитор
        if (c == '\n') {
          if (currentLine.length() == 0) {
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println();
            // содержимое ответа HTTP следует за заголовком:
            client.print("Click <a href=\"/showValue\">here</a> showValue of the potentiometer <br>");
            // Ответ HTTP заканчивается еще одной пустой строкой:
            client.println();
            // выйти из цикла while:
            break;
          } else {
            // если вы получили новую строку, то очищаем currentLine:
            currentLine = "";
          }
        } else if (c != '\r') {
          currentLine += c;
          // добавляем его в конец currentLine
        }
        if (currentLine.endsWith("GET /showValue")) {
          Serial.println(sensorValue);
          delay(2000);
        }
      }
    }
    client.stop();
  }
}

Это код моего веб-клиента, который я использую https://www.arduino. cc/en/Tutorial/Wifi101WiFiWebClient — я не уверен, как мне изменить это, чтобы получить значение потенциометра напротив веб-сервера MKR1000. Будем очень признательны за любые советы или подсказки!

Извините, если это простой вопрос, однако я только начинаю с идеи Arduino, и я новичок в программировании!

Спасибо.

, 👍1


2 ответа


1

В нижней части страницы предоставленной вами ссылки на клиентский код есть ссылка на пример Chat Server. Если вы изучите код, я думаю, вы увидите, как отправлять и получать показания потенциометра. Подсказка: посмотрите в коде, где он повторяет то, что получает.

mkr1000 Wi-Fi Chat Server

,

0

Для этого вам не нужно использовать веб-сервер/веб-клиент; необработанный сокет также будет работать. Если вы хотите использовать "веб-технологии":

Веб-клиент может периодически опрашивать веб-сервер для получения нового значения (запрашивать новое значение каждые несколько секунд и интерпретировать ответ), либо веб-сервер инициирует связь каждый раз, когда доступно новое значение.

В последнем случае вы можете использовать события, отправленные сервером, или веб-сокет, оба из которых очень удобны для Google.

Я сделал примеры для обоих, но они довольно большие и имеют дополнительную функциональность. Тем не менее, они могут дать вам некоторые указатели и/или код для повторного использования.

Эти примеры здесь:

https://github.com/ocrdu/arduino-webinterface-sse

и здесь:

https://github.com/ocrdu/arduino-webinterface-websocket-ap

Обратите внимание, что клиентская сторона в примерах — это веб-страница в веб-браузере, но принцип тот же.

,