arduino 522下位机 8266上位机 串口 通信 上传到服务器 SQL 手机可查看状态1.0
(下位机)Uno的代码:
int a=2; int s=3; int addr = 0; String val; int v0=0; int v1=0; int v2=0; int v3=0; char mac_s[18]; #define mac_addr 300 #define offj 7 #include <SPI.h> #include <ArduinoJson.h> #include <MFRC522.h> #include <EEPROM.h> #define SS_PIN 10 #define RST_PIN 9 const char* mac; char mac_c[17]; int t_temp=0; MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class MFRC522::MIFARE_Key key; // Init array that will store new NUID byte nuidPICC[4]; void t_time10(void); void setup() { Serial.begin(115200); pinMode(a,INPUT_PULLUP); pinMode(offj,INPUT_PULLUP); SPI.begin(); // Init SPI bus rfid.PCD_Init(); // Init MFRC522 for (byte i = 0; i < 6; i++) { key.keyByte[i] = 0xFF; } v0=EEPROM.read(addr); v1=EEPROM.read(addr+1); v2=EEPROM.read(addr+2); v3=EEPROM.read(addr+3); for(int i =0; i<17;i++) { mac_s[i]=EEPROM.read(mac_addr+i); } Serial.println(mac_s); do { Serial.print("mac"); rx(); rx_macok(); delay(1000); }while(mac[2]!=':'); /* Serial.print(v0); Serial.print(v1); Serial.print(v2); Serial.print(v3); */ // Serial.println(F("This code scan the MIFARE Classsic NUID.")); // Serial.print(F("Using the following key:")); printHex(key.keyByte, MFRC522::MF_KEY_SIZE); delay(300); Serial.print("mac"); } void loop() { rx(); rx_macok(); val=""; //每10秒执行一次 t_time10(); if ( ! rfid.PICC_IsNewCardPresent()) return; if ( ! rfid.PICC_ReadCardSerial()) return; MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); //Serial.println(rfid.PICC_GetTypeName(piccType)); /* // Check is the PICC of Classic MIFARE type if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI && piccType != MFRC522::PICC_TYPE_MIFARE_1K && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { Serial.println(F("Your tag is not of type MIFARE Classic.")); return; } */ // Store NUID into nuidPICC array for (byte i = 0; i < 4; i++) { nuidPICC[i] = rfid.uid.uidByte[i]; } //printHex(rfid.uid.uidByte, rfid.uid.size); // printDec(rfid.uid.uidByte, rfid.uid.size); //Serial.println(); if (rfid.uid.uidByte[0] == v0 && rfid.uid.uidByte[1] == v1 && rfid.uid.uidByte[2] ==v2 && rfid.uid.uidByte[3] == v3 ) { Serial.println(String("&statu=on&uid=") + rfid.uid.uidByte[0]+ rfid.uid.uidByte[1]+ rfid.uid.uidByte[2]+ rfid.uid.uidByte[3] +"&mac="+mac); delay(100); Serial.println("ok"); } else Serial.println(String("&statu=error&uid=") + rfid.uid.uidByte[0]+ rfid.uid.uidByte[1]+ rfid.uid.uidByte[2]+ rfid.uid.uidByte[3] +"&mac="+mac); // Halt PICC rfid.PICC_HaltA(); // Stop encryption on PCD rfid.PCD_StopCrypto1(); if(digitalRead(a)==LOW) { delay(15); if(digitalRead(a)==LOW) { EEPROM.write(addr,rfid.uid.uidByte[0]); EEPROM.write(addr+1,rfid.uid.uidByte[1]); EEPROM.write(addr+2,rfid.uid.uidByte[2]); EEPROM.write(addr+3,rfid.uid.uidByte[3]); Serial.println((String)"&statu=write&uid=" + rfid.uid.uidByte[0]+ rfid.uid.uidByte[1]+ rfid.uid.uidByte[2]+ rfid.uid.uidByte[3] +"&mac="+mac); } } } void printHex(byte *buffer, byte bufferSize) { for (byte i = 0; i < bufferSize; i++) { Serial.print(buffer[i] < 0x10 ? " 0" : " "); Serial.print(buffer[i], HEX); } } void printDec(byte *buffer, byte bufferSize) { for (byte i = 0; i < bufferSize; i++) { Serial.print(buffer[i] < 0x10 ? " 0" : " "); Serial.print(buffer[i], DEC); } } void t_time10(void) { if(millis()/10000!=t_temp) { t_temp=millis()/10000; if(digitalRead(offj)==LOW) { Serial.print("&statu=off&off=0&mac="); Serial.println(mac); } else Serial.print("&statu=off&off=1&mac="); Serial.println(mac); } } void rx(void) { while(Serial.available()>0){ val += char(Serial.read()); delay(2); } } void rx_macok() { if (val.length() > 0 ) { StaticJsonBuffer<200> jsonBuffer; JsonObject& jiexi = jsonBuffer.parseObject(val); if (!jiexi.success()) { //Serial.print("mac"); // return; } else{ mac = jiexi["macok"]; /* for(int i=0;17>i;i++) { EEPROM.write(mac_addr+i,mac[i]); delay(3); } */ } } //Serial.print(val); }
8266上位机代码
#include <ESP8266WiFi.h> #include <ArduinoJson.h> int num=0; char pp[128]; String val=""; //自行修改wifi名和密码 const char* ssid = "WiFi"; const char* password = "23456789"; const char* host = "xiaohe4966.zonezhi.com"; uint8_t MAC_array_STA[6];//MAC地址 char MAC_char_STA[18]; String statu="on"; String uid="uid"; String off=""; void mac(void); void get_val(String val); void setup() { Serial.begin(115200);//端口波特率 Serial.println(ssid); //连接wifi WiFi.begin(ssid, password); //等待wifi连接 while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); mac(); } void loop() { while(Serial.available()>0){ val += char(Serial.read()); delay(2); } if (val.length()> 0) { //Serial.println(val); if(val=="mac") { Serial.println(String("{\"macok\":")+"\""+ MAC_char_STA[0]+ MAC_char_STA[1]+":"+ MAC_char_STA[3]+ MAC_char_STA[4]+":"+ MAC_char_STA[6]+ MAC_char_STA[7]+":"+ MAC_char_STA[9]+ MAC_char_STA[10]+":"+MAC_char_STA[12]+ MAC_char_STA[13]+":"+MAC_char_STA[15]+ MAC_char_STA[16]+"\"}"); } else { if(val.length() > 4) { // Serial.println(val); if(val[0]=='&') { get_val(val); } } } /* for(int i=0;i<val.length();i++) { pp[i]=val[i]; } JsonObject& jiexi = jsonBuffer.parseObject(pp); if (!jiexi.success()) { Serial.println("parseObject() failed"); return; } const char* statu = jiexi["statu"]; */ // Serial.println(MAC_char_STA); } val=""; } void mac(void) { WiFi.macAddress(MAC_array_STA); for (int i = 0; i < sizeof(MAC_array_STA); ++i) { sprintf(MAC_char_STA, "%s%02X ", MAC_char_STA, MAC_array_STA[i]); } } void get_val(String val) { Serial.print("************* "); Serial.println(millis());//打印系统运行毫秒 WiFiClient client; num++; if (!client.connect(host,80)) { Serial.println("connection failed");//连接服务器失败 return; } //GET提交网络 可自己百度GET提交方式 String url = "http://xiaohe4966.zonezhi.com/8266/door.php?"; client.print(String("GET ") + url + val+ " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); //val +"&uid="+uid + "&off=" + off + "&mac="+ MAC_char_STA[0]+ MAC_char_STA[1]+":"+ MAC_char_STA[3]+ MAC_char_STA[4]+":"+ MAC_char_STA[6]+ MAC_char_STA[7]+":"+ MAC_char_STA[9]+ MAC_char_STA[10]+":"+MAC_char_STA[12]+ MAC_char_STA[13]+":"+MAC_char_STA[15]+ MAC_char_STA[16] delay(5); Serial.println(millis());//打印系统运行毫秒 //获取服务器返回的信息给line变量 while(client.available()){ String line = client.readStringUntil('\r'); Serial.print(line); } //结束 Serial.println(); Serial.println(millis()); Serial.println("________"); }