Как Arduino Mega 2560+Wifi Shield 2.0 (SeeedStudio) может получать данные из базы данных на сервере XAMPP на моем ПК?
Я пытаюсь подключить Arduino Mega через Wi-Fi к моему серверу XAMPP. Моя основная цель — получить значение из моей базы данных и сохранить его в переменной в коде Arduino. С помощью этой новой переменной я смогу управлять остальной частью программы... Так что мне нужна ваша помощь. Кто-нибудь может дать мне совет?
Я уже перепробовал все, что нашел в Интернете, но ничего не работает.
Я думаю, что проще всего отправить GET-запрос на сервер и прочитать его ответ... Но по какой-то причине я не могу отправить GET-запрос через...
Я протестировал его непосредственно в браузере, и значение отображается, поэтому я думаю, что на стороне сервера все в порядке.
Вот мой код Arduino:
#include <Arduino.h>
#include <SoftwareSerial.h>
#include "WiFly.h"
#include "HTTPClient.h"
#define SSID "mySSID"
#define KEY "myKEY"
#define AUTH WIFLY_AUTH_WPA2_PSK
#define HTTP_GET_URL "http://192.168.1.80/xampp/training/send_data_db.php/?temp=0"
// соединение пинов
// Ардуино WiFly
// 2 <----> Передача
// 3 <----> RX
SoftwareSerial uart(10, 11);
WiFly wifly(uart);
HTTPClient http;
char get;
void setup() {
Serial.begin(9600);
Serial.println("------- WIFLY HTTP --------");
uart.begin(9600); // Скорость передачи WiFly UART: 9600
// Подождите, пока WiFly запустится
// задержка(3000);
// проверяем, связан ли WiFly с точкой доступа (SSID)
if (!wifly.isAssociated(SSID)) {
while (!wifly.join(SSID, KEY, AUTH)) {
Serial.println("Failed to join " SSID);
Serial.println("Wait 0.1 second and try again...");
delay(100);
}
wifly.save(); // сохранить конфигурацию,
}
Serial.println("\r\nTry to get url - " HTTP_GET_URL);
Serial.println("------------------------------");
while (http.get(HTTP_GET_URL, 10000) < 0) {
}
while (wifly.receive((uint8_t *)&get, 1, 1000) == 1) {
Serial.print(get);
}
if (wifly.commandMode()) {
Serial.println("\r\n\r\nEnter command mode. Send \"exit\"(with \\r) to exit command mode");
}
}
void loop() {
int c;
while (wifly.available()) {
c = wifly.read();
if (c > 0) {
Serial.write((char)c);
}
}
while (Serial.available()) {
c = Serial.read();
if (c >= 0) {
wifly.write((char)c);
}
}
}
А вот PHP-код:
<? php
include("./connection/database_connect.php");
include("./top_table.php");
if ((isset($_SESSION["ID"])) AND (isset($_GET["temp"]))) {
$id = $_SESSION["ID"];
$sql = "SELECT temp FROM perfil, client WHERE perfil.ID ='$id'";
$consult = mysqli_query($connect, $sql);
$result = mysqli_num_rows($consult);
if (($result == 1)) {
$person_data = mysqli_fetch_array($consult, MYSQLI_ASSOC);
$temp = $person_data["temp"];
header("HTTP/1.1" . " " . 200 . "OK");
header("Content-Type: text/html; charset=UTF-8");
header("Content-Length: 1112");
header("Connection: close");
header("/r/n");
echo $temp;
} else {
//se user dosen't exist on data base
header("Location: http://192.168.1.80/xampp/training/login.php");
exit;
}
} else {
header("Location: http://192.168.1.80/xampp/training/login.php");
exit;
}
?>
2 ответа
Вы должны забыть о $_SESSION["ID"]; на стороне PHP, потому что вы работаете без сохранения состояния без сеанса! Вы должны указать параметр для идентификации вашей переменной от arduino до скрипта php - это temp=0? Если это так, вам нужно обменять
$sql="SELECT temp FROM perfil, client WHERE perfil.ID ='$id'";
с
$sql="SELECT temp FROM perfil, client WHERE perfil.ID =" . $_GET["temp"];
предполагается, что perfil.id является целым числом. Если это строка, добавьте "'".
Да, вы правы!
Тем временем я закончил этот проект.
Проблема была связана с экраном Wi-Fi, который я использовал. Запрос Http был в неправильном формате.
- Ошибка тайм-аута с Arduino Mega и ESP8266 в качестве модуля Wi-Fi
- Существуют ли какие-либо модули Wi-Fi для Arduino или Uno, которые можно подключить к внешней антенне Wi-Fi?
- Ошибка тайм-аута Arduino Mega Wifi Shield
- Связь Mega <> esp8266 отправляет непонятные данные
- Использование обычного TFT экрана с SD в качестве дисплея Nextion
- WebSocketsServer.h: No such file or directory
- Использование аналогового входа для чтения кнопки
- Преобразование строки в массив символов
Шаг 1: подтвердите, достигает ли запрос сервера Apache., @Majenko
Извините за задержку, но только сейчас увидел... Да, запрос доходит до сервера. Я попытался использовать более простой код, чтобы быть уверенным, что сервер отправляет ответ, но не то, что я хочу. Кажется, что $_GET['temp'] не установлен..., @Filipe Carrasquinho
php/?temp
- мне это кажется "сомнительным". Должен ли там быть/
?, @MajenkoЯ так думаю, совсем недавно я заметил ошибку в этой строке, у меня там было "php/?$temp", и решил часть своей проблемы. Похоже , проблема в том, что $_SESSION недоступен. И, кроме того, моя веб-страница в браузере не реагирует, @Filipe Carrasquinho
Для
$_SESSION
нужны либо файлы cookie, либо параметрPHPSESSID=....
, чего у вас, скорее всего, не будет., @Majenkoгм... это может быть проблемой, я только вхожу в систему пользователя в своем браузере и запускаю сеанс в "include('./top_table.php'), может быть, этого недостаточно. Я думал, что когда пользователь войдет в систему, я смогу использовать его
$_SESSION
, но, похоже, нет... Меняет лиPHPSESSID
новый сеанс? если да, я не думаю, что смогу использовать его в коде Arduino в качестве переменной. Что я должен делать? зарегистрировать arduino вместе с информацией о человеке/доме? С этим я мог бы получить доступ к идентификатору человека и связаться с «temp», @Filipe CarrasquinhoPHPSESSID — это уникальный ключ, идентифицирующий сеанс. Он выделяется PHP при открытии сеанса и должен возвращаться обратно в PHP с каждым запросом, чтобы иметь возможность доступа к сеансу. Что вы можете сделать, так это выполнить двухэтапное действие входа в систему, когда вы сначала переходите на страницу входа, которая возвращает ваш идентификатор сеанса, а затем вы делаете свой обычный (и все последующие) запросы, включая идентификатор сеанса., @Majenko
Филипе, мне нужна твоя помощь. Можете ли вы помочь мне из этого! Мне нужно хранить данные датчика напряжения от arduino mega с помощью щита на локальном сервере. Пожалуйста, свяжитесь со мной по адресу [email protected] Спасибо за ваше время., @Partha S. Kundu