Php 使用NodeMCU ESP8266将Arduino数据发送到mySQL数据库
请帮我输入密码。我有arduino代码,可以从mySql发送和获取数据。它运行良好,并将数据存储到数据库中。问题是,如果我打开按钮,值1存储在数据库中,但当我关闭按钮时,值0不存储在数据库中 这是我的arduino代码:Php 使用NodeMCU ESP8266将Arduino数据发送到mySQL数据库,php,c++,arduino,Php,C++,Arduino,请帮我输入密码。我有arduino代码,可以从mySql发送和获取数据。它运行良好,并将数据存储到数据库中。问题是,如果我打开按钮,值1存储在数据库中,但当我关闭按钮时,值0不存储在数据库中 这是我的arduino代码: //Arduino Code #include <SoftwareSerial.h> SoftwareSerial s(5,6);//Rx,Tx int buttonPinBulb = 11; int relay1 = 10; int buttonBulb; in
//Arduino Code
#include <SoftwareSerial.h>
SoftwareSerial s(5,6);//Rx,Tx
int buttonPinBulb = 11;
int relay1 = 10;
int buttonBulb;
int currentStatus = LOW;
unsigned long lastMillis = 0;
const unsigned long debounceTime = 100;
void setup() {
// put your setup code here, to run once:
pinMode(buttonPinBulb, INPUT_PULLUP);
pinMode(relay1, OUTPUT);
s.begin(115200);
}
void loop() {
// put your main code here, to run repeatedly:
buttonBulb = digitalRead(buttonPinBulb);
bulbOnOff(buttonBulb);
}
int bulbOnOff(int buttonBulb) {
unsigned long currentMillis = millis();
// protect against overflow
if ( (currentMillis - lastMillis > debounceTime) || (currentMillis < lastMillis)) {
if (buttonBulb != currentStatus) {
digitalWrite(relay1, buttonBulb);
//Serial.println(!buttonBulb);
currentStatus = buttonBulb;
// update database here
if(s.available()>0)
{
s.write(!buttonBulb);
}
lastMillis = currentMillis;
}
}
return 0;
}
//Arduino代码
#包括
串行软件(5,6)//接收,发送
int buttonPinBulb=11;
int relay1=10;
int按钮盒;
int currentStatus=低;
无符号长lastMillis=0;
常量无符号长去BounceTime=100;
无效设置(){
//将安装代码放在此处,以便运行一次:
pinMode(按钮输入按钮,输入按钮上拉);
引脚模式(继电器1,输出);
s、 开始(115200);
}
void循环(){
//将主代码放在此处,以便重复运行:
buttonBulb=数字读取(buttonBulb);
bulbOnOff(buttonBulb);
}
int bulbOnOff(int buttonBulb){
无符号长电流毫秒=毫秒();
//防止溢出
if((当前毫秒-最后毫秒>去BounceTime)| |(当前毫秒<最后毫秒)){
if(buttonBulb!=当前状态){
数字写入(relay1,buttonBulb);
//Serial.println(!buttonBulb);
currentStatus=按钮bulb;
//在此更新数据库
如果(s.可用()>0)
{
s、 写入(!buttonBulb);
}
lastMillis=当前Millis;
}
}
返回0;
}
以下是nodeMCU ESP8266代码
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266HTTPClient.h>
#include <SoftwareSerial.h>
SoftwareSerial s(D6, D5); //RX,TX
int buttonBulb;
int Led_OnBoard = 2;
const char* ssid = "iPhone"; // Your wifi Name
const char* password = "Qaser.shah.123"; // Your wifi Password
const char *host = "172.20.10.6"; //Your pc or server (database) IP, example : 192.168.0.0 , if you are a windows os user, open cmd, then type ipconfig then look at IPv4 Address.
void setup() {
// put your setup code here, to run once:
wifiConnection();
s.begin(115200);
}
int wifiConnection() {
pinMode(Led_OnBoard, OUTPUT); // Initialize the Led_OnBoard pin as an output
Serial.begin(115200);
WiFi.mode(WIFI_OFF); //Prevents reconnection issue (taking too long to connect)
delay(1000);
WiFi.mode(WIFI_STA); //This line hides the viewing of ESP as wifi hotspot
WiFi.begin(ssid, password); //Connect to your WiFi router
Serial.println("");
Serial.print("Connecting");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
digitalWrite(Led_OnBoard, LOW);
delay(250);
Serial.print(".");
digitalWrite(Led_OnBoard, HIGH);
delay(250);
}
digitalWrite(Led_OnBoard, HIGH);
//If connection successful show IP address in serial monitor
Serial.println("");
Serial.println("Connected to Network/SSID");
Serial.print("IP address: ");
Serial.println(WiFi.localIP()); //IP address assigned to your ESP
Serial.begin(115200);
}
void loop() {
// put your main code here, to run repeatedly:
s.write("s");
if (s.available() > 0)
{
buttonBulb = s.read();
Serial.println(buttonBulb);
int result = updateDatabase(buttonBulb);
if(result != 0){
//error updating database
Serial.print("error updating database");
}
}
}
int updateDatabase(int buttonBulb){
HTTPClient http; //Declare object of class HTTPClient
//String ButtonState;
String buttonValueSend, postData;
buttonValueSend = String(buttonBulb); //String to interger conversion
//Post Data
postData = "buttonBulb=" + buttonValueSend;
http.begin("http://172.20.10.6/Nodemcu_db_record_view/InsertDB.php"); //Specify request destination
http.addHeader("Content-Type", "application/x-www-form-urlencoded"); //Specify content-type header
int httpCode = http.POST(postData); //Send the request
String payload = http.getString(); //Get the response payload
Serial.println(httpCode); //Print HTTP return code
Serial.println(payload); //Print request response payload
Serial.println("Button Value send=" + buttonValueSend);
http.end(); //Close connection
return 0;
}
#包括
#包括
#包括
#包括
#包括
串行软件(D6、D5)//接收,发送
int按钮盒;
仪表板上的int Led_=2;
const char*ssid=“iPhone”//您的wifi名称
const char*password=“Qaser.shah.123”//您的wifi密码
const char*host=“172.20.10.6”//您的pc或服务器(数据库)IP,例如:192.168.0.0,如果您是windows操作系统用户,请打开cmd,然后键入ipconfig,然后查看IPv4地址。
无效设置(){
//将安装代码放在此处,以便运行一次:
wifiConnection();
s、 开始(115200);
}
int-wifiConnection(){
引脚模式(Led_板载,输出);//将Led_板载引脚初始化为输出
序列号开始(115200);
WiFi.mode(WiFi_OFF);//防止重新连接问题(连接时间过长)
延迟(1000);
WiFi.mode(WiFi_STA);//此行隐藏了ESP作为WiFi热点的查看
WiFi.begin(ssid,密码);//连接到您的WiFi路由器
Serial.println(“”);
串行打印(“连接”);
//等待连接
while(WiFi.status()!=WL_已连接){
数字写入(车载Led_,低电平);
延迟(250);
连续打印(“.”);
数字写入(车载Led_,高);
延迟(250);
}
数字写入(车载Led_,高);
//如果连接成功,在串行监视器中显示IP地址
Serial.println(“”);
Serial.println(“连接到网络/SSID”);
串行打印(“IP地址:”);
Serial.println(WiFi.localIP());//分配给ESP的IP地址
序列号开始(115200);
}
void循环(){
//将主代码放在此处,以便重复运行:
s、 写下(“s”);
如果(s.可用()>0)
{
buttonBulb=s.read();
Serial.println(buttonBulb);
int result=updateDatabase(buttonBulb);
如果(结果!=0){
//更新数据库时出错
串行打印(“错误更新数据库”);
}
}
}
int updateDatabase(int buttonBulb){
HTTPClient http;//声明类HTTPClient的对象
//字符串按钮状态;
字符串按钮value发送,postData;
buttonValueSend=String(buttonBulb);//字符串到整数的转换
//发布数据
postData=“buttonBulb=“+buttonValueSend;
http.begin(“http://172.20.10.6/Nodemcu_db_record_view/InsertDB.php“”;//指定请求目标
http.addHeader(“内容类型”、“应用程序/x-www-form-urlencoded”);//指定内容类型头
int httpCode=http.POST(postData);//发送请求
字符串负载=http.getString();//获取响应负载
Serial.println(httpCode);//打印HTTP返回代码
Serial.println(负载);//打印请求响应负载
Serial.println(“按钮值发送=”+按钮值发送);
http.end();//关闭连接
返回0;
}
以下是我存储Arduino数据的php代码
<?php
//Creates new record as per request
//Connect to database
$servername = "localhost"; //example = localhost or 192.168.0.0
$username = "root"; //example = root
$password = "";
$dbname = "automation";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Database Connection failed: " . $conn->connect_error);
}
//Get current date and time
date_default_timezone_set('Asia/Karachi');
$d = date("Y-m-d");
$t = date("H:i:s");
if(!empty($_POST['buttonBulb']))
{
$buttonBulb = $_POST['buttonBulb'];
$sql = "INSERT INTO project (ButtonState, Date, Time) VALUES ('".$buttonBulb."', '".$d."', '".$t."')"; //nodemcu_ldr_table = Youre_table_name
if ($conn->query($sql) === TRUE) {
echo "OK";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
$conn->close();
?>
您可以创建一个单独的函数来更新数据库,并且只在按钮状态更改时调用更新
结合我对你上一个问题的回答,情况如下:
void循环(){
无符号长电流毫秒=毫秒();
如果((当前毫秒-最后毫秒>去BounceTime)
||(currentMillis
我发现了问题。问题出在我的php代码中,这就是为什么1会存储在数据库中,而0不会
以下是我对php代码的更改
我刚刚删除了if(!empty(&_POST['buttonBulb']){}
在if语句中使用的代码现在位于if语句的外部。
原因
在这之后,当我将1发送到此代码时,这是正常的,但是如果发送0,则is语句假定没有值,buttonBulb变量为空
谢谢你们所有在这段代码中帮助我的人。不