问题描述
我想将 rfid 和重量一起发送到数据库。 我可以通过 http 成功发送并在另一端使用 PHP 存储在我的数据库(本地)中,但是一旦有新的 rfid 卡,我如何发送最新的重量数据,我希望这两个数据都被存储在同一张桌子上。 请检查下面的代码并帮助我。 提前致谢。
#include <SPI.h>
#include <MFRC522.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266WiFi.h>
#include <HX711_ADC.h>
#include <EEPROM.h>
#define SS_PIN D4
#define RST_PIN D2
#define ERROR_PIN D0
#define SUCCESS_PIN D1
#define CONN_PIN D8
//pins:
const int HX711_dout = D1; //mcu > HX711 dout pin
const int HX711_sck = D8; //mcu > HX711 sck pin
//display text:
//HX711 constructor:
HX711_ADC LoadCell(HX711_dout,HX711_sck);
const int calVal_eepromAdress = 0;
long t;
const char *ssid = "ssid";
const char *password = "password";
MFRC522 mfrc522(SS_PIN,RST_PIN);
void setup() {
delay(1000);
Serial.begin(9600);
Serial.println();
Serial.println("Starting...");
LoadCell.begin();
float calibrationValue; // calibration value (see example file "Calibration.ino")
calibrationValue = -20.35; // uncomment this if you want to set the calibration value in the sketch
#if defined(ESP8266)|| defined(ESP32)
//EEPROM.begin(512); // uncomment this if you use ESP8266/ESP32 and want to fetch the calibration value from eeprom
#endif
//EEPROM.get(calVal_eepromAdress,calibrationValue); // uncomment this if you want to fetch the calibration value from eeprom
long stabilizingtime = 2000; // preciscion right after power-up can be improved by adding a few seconds of stabilizing time
boolean _tare = true; //set this to false if you don't want tare to be performed in the next step
LoadCell.start(stabilizingtime,_tare);
if (LoadCell.getTareTimeoutFlag()) {
Serial.println("Timeout,check MCU>HX711 wiring and pin designations");
while (1);
}
else {
LoadCell.setCalFactor(calibrationValue); // set calibration value (float)
Serial.println("Startup is complete");
}
WiFi.mode(WIFI_OFF);
delay(1000);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid,password);
Serial.println("");
pinMode(CONN_PIN,OUTPUT);
pinMode(SUCCESS_PIN,OUTPUT);
pinMode(ERROR_PIN,OUTPUT);
Serial.print("Connecting");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
SPI.begin();
mfrc522.PCD_Init();
}
void sendRfidLog(long cardId) {
if(WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String postData = "cardid=" + String(cardId) + /*"&weight=" + String(weight) +*/"&action=insertRfIdLog";
http.begin("http://192.168.1.9/gardensuite/PHP/rfid.PHP");
http.addHeader("Content-Type","application/x-www-form-urlencoded");
int httpCode = http.POST(postData);
String payload = http.getString();
Serial.println(httpCode);
Serial.println(payload);
if(payload.equals("success")) {
digitalWrite(SUCCESS_PIN,HIGH);
} else {
digitalWrite(ERROR_PIN,HIGH);
}
http.end();
}
}
void toggleConnStat() {
if(WiFi.status() == WL_CONNECTED) {
digitalWrite(CONN_PIN,HIGH);
} else {
digitalWrite(CONN_PIN,LOW);
}
}
void loop() {
if ( mfrc522.PICC_IsNewCardPresent()){
if ( mfrc522.PICC_ReadCardSerial()){
long code=0;
for (byte i = 0; i < mfrc522.uid.size; i++){
code=((code+mfrc522.uid.uidByte[i])*10);
}
Serial.print(code);
sendRfidLog(code);
}
}
toggleConnStat();
delay (500);
digitalWrite(SUCCESS_PIN,LOW);
digitalWrite(ERROR_PIN,LOW);
static boolean newDataReady = 0;
const int serialPrintInterval = 0; //increase value to slow down serial print activity
// check for new data/start next conversion:
if (LoadCell.update()) newDataReady = true;
// get smoothed value from the dataset:
if (newDataReady) {
if (millis() > t + serialPrintInterval) {
float weight = LoadCell.getData();
Serial.print("Load_cell output val: ");
Serial.println(weight);
newDataReady = 0;
t = millis();
}
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)