Как получить данные из базы данных моего сервера в переменную в моем 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'. Я не знаю, как это сделать.
@Manihatty, 👍5
Обсуждение2 ответа
Если ваш Arduino подключен к протоколу tcp/ip, ответ можно найти в Поваренной книге O'Reilly по Arduino: Рецепт 15-4. Как упоминалось в Sourcery, вам нужно создать новую страницу на стороне PHP, которая выдает только те данные, которые вы ищете, а затем использовать веб-клиент на стороне Arduino для загрузки этих данных.
Если у вас нет Arduino в сети, вам придется передать данные по последовательному каналу. Одним из способов было бы вставить его в исходный код и перекомпилировать/перезаписать Arduino. Меньший молоток будет состоять в том, чтобы встроить в ваш скетч Arduino что-то, что может иметь дело с получением данных через последовательный порт USB, и иметь прокладку на стороне компьютера для извлечения данных из PHP и отправки их в Arduino. Последовательная связь с Arduino и обработка показывает что-то похожее, где он запускает Processing на компьютере, который передает данные в Arduino.
первая ссылка предназначена только для авторизованных пользователей, а вторая — 404., @Mazaryk
Я исправил второй URL., @chicks
После отправки запроса 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";
. И на всякий случай убедитесь, что перед <?
нет пробелов, и удалите завершающий ?>
.
- Как динамически обновлять текстовый файл
- Как происходит запрос сервера?
- Проблема с получением SMS - GSM-модуль Arduino Uno и SIM900A
- Мини-модем SIM900a, IMEI 0, помощь с контактами TX RX
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- SIM800L не регистрируется в сети
- Как отправлять сообщения на несколько номеров с помощью модуля Arduino uno и SIM800?
- Клиент MQTT на Arduino + SIM900
Чтобы получить данные с веб-сервера на Arduino, просто создайте страницу hph или html со значением, написанным на странице. Таким образом, вы можете получить значение с веб-сервера, запросив страницу, а затем использовать значение в своем коде. Поскольку у вас уже есть отправка, просто создайте еще одну страницу, которая записывает значение из БД., @Sourcery