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("________");
  
}

 

posted @ 2017-09-26 20:54  xiaohe520  阅读(115)  评论(0编辑  收藏  举报