Как получить данные из базы данных моего сервера в переменную в моем Arduino?

Я учусь работать со связью клиент-сервер. Я могу общаться со своим сервером и хранить значения в таблице. Но я хочу получить одну из конкретных данных из базы данных.

Здесь я хочу получить значение «abc» из столбца «Текущий» для сохранения в переменной в моем Arduino.

Ниже приведен код, который я сделал до сих пор. Я был бы очень рад, если бы вы смогли решить проблему.

Вот моя структура базы данных

--------------------------------------------------- 
| Device |  Previous |  Next |  Distance |  Current| 
---------------------------------------------------
|katup123| xyz       | abc   | 2.600     | abc     |    
---------------------------------------------------

Вот мой код PHP:

locator.php

<?php
$con=mysqli_connect("your_domain.com","peter","abc123","locate");
// Проверьте подключение
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($con,"SELECT Current FROM locate WHERE Device='katup123'");

while($row = mysqli_fetch_array($result)) {
  echo $row['Current'];
  echo "<br>"; 
}
?> 

Вот мой код Arduino:

// Включаем библиотеку GSM
#include <GSM.h>
#define PINNUMBER ""
// данные точки доступа
#define GPRS_APN       "GPRS_APN" // замените ваш GPRS APNgpsll
#define GPRS_LOGIN     "login"    // замените на ваш GPRS логин
#define GPRS_PASSWORD  "password" // замените на ваш пароль GPRS
// инициализируем экземпляр библиотеки
GSM gsmAccess;
GSMClient client;
GPRS gprs;
// URL, путь и усилитель; порт (например: arduino.cc)
char server[] = "your_domain.com";
char path[] = "/locater.php";
int port = 80; // порт 80 используется по умолчанию для HTTP

void setup() {
  Serial.begin(9600);
  Serial.println("Starting Arduino web client.");
  // состояние соединения
  boolean notConnected = true;
  // Запуск GSM-щита
  // Если у вашей SIM-карты есть PIN-код, передайте его как параметр begin() в кавычках
  while(notConnected) {
    if((gsmAccess.begin(PINNUMBER)==GSM_READY) & (gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD)==GPRS_READY))
      notConnected = false;
    else {
      Serial.println("Not connected");
      delay(1000);
    }
  }
  Serial.println("GSM initialized");
  Serial.println("connecting...");
}

void loop() {
  char result [20];
  Serial.print(" Connecting to server Database ");
  if (client.connect(server, port)) {
    client.print("GET /locator.php?");
    Serial.print("GET /locator.php?");
    client.println(" HTTP/1.1");
    Serial.println(" HTTP/1.1");
    client.println("Host: www.your_domain.com");
    Serial.println("Host: www.your_domain.com");
    client.println("User-Agent: Arduino");
    Serial.println("User-Agent: Arduino");
    client.println("Accept: text/html");
    Serial.println("Accept: text/html");
    client.println("Connection: close");
    Serial.println("Connection: close");
    client.println();
    Serial.println();
    Serial.println("\nCOMPLETE!\n");
    client.stop();
  } else {
    Serial.println("connection failed");
    Serial.println("\n FAILED!\n");
  }
  delay(5000);
}

Здесь я хочу сохранить значение 'abc' в моей переменной 'result'. Я не знаю, как это сделать.

, 👍5

Обсуждение

Чтобы получить данные с веб-сервера на Arduino, просто создайте страницу hph или html со значением, написанным на странице. Таким образом, вы можете получить значение с веб-сервера, запросив страницу, а затем использовать значение в своем коде. Поскольку у вас уже есть отправка, просто создайте еще одну страницу, которая записывает значение из БД., @Sourcery


2 ответа


1

Если ваш Arduino подключен к протоколу tcp/ip, ответ можно найти в Поваренной книге O'Reilly по Arduino: Рецепт 15-4. Как упоминалось в Sourcery, вам нужно создать новую страницу на стороне PHP, которая выдает только те данные, которые вы ищете, а затем использовать веб-клиент на стороне Arduino для загрузки этих данных.

Если у вас нет Arduino в сети, вам придется передать данные по последовательному каналу. Одним из способов было бы вставить его в исходный код и перекомпилировать/перезаписать Arduino. Меньший молоток будет состоять в том, чтобы встроить в ваш скетч Arduino что-то, что может иметь дело с получением данных через последовательный порт USB, и иметь прокладку на стороне компьютера для извлечения данных из PHP и отправки их в Arduino. Последовательная связь с Arduino и обработка показывает что-то похожее, где он запускает Processing на компьютере, который передает данные в Arduino.

,

первая ссылка предназначена только для авторизованных пользователей, а вторая — 404., @Mazaryk

Я исправил второй URL., @chicks


2

После отправки запроса GET вы читаете ответ, чтобы заполнить объявленную вами переменную char result [20]:

int i=0;
...
if (client.connect(server, port))
{
  client.print("GET /locator.php?");
  ...
  Serial.println("\nCOMPLETE!\n");

  // Чтение ответа от сервера
  i=0;
  while (client.available())
  {
    result[i] = client.read();
    Serial.print(result[i]);
    i++;
  }

  client.stop(); // Отключить
}

Это пример, result будет содержать текст, выводимый locator.php. Вам нужно будет настроить этот код, чтобы применить его к вашему делу. В приведенном выше коде нет проверки ошибок любого рода. Кроме того, вы должны выполнить проверку и сделать веб-вызов только один раз.

В locator.php вы должны заменить echo "<br/>"; на echo "\n";. И на всякий случай убедитесь, что перед <? нет пробелов, и удалите завершающий ?>.

,