Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有ESP8266的RC522不工作Arduino uno_Arduino_Arduino Uno_Esp8266_Rfid - Fatal编程技术网

带有ESP8266的RC522不工作Arduino uno

带有ESP8266的RC522不工作Arduino uno,arduino,arduino-uno,esp8266,rfid,Arduino,Arduino Uno,Esp8266,Rfid,我已经为Arduino Uno编写了以下代码,用于使用RC522模块和ESP8266模块扫描RFID卡,以连接到我的路由器 现在,当我扫描任何一张卡时,它应该读取卡号并向我的服务器的IP地址发送一个请求并获得响应 但在成功读取RFID卡后,通过TCP与服务器的连接不起作用: esp.println("AT+CIPSTART=\"TCP\",\"" + server + "\",80");//start a TCP connection. 因此,我无法向服务器发送请求 但是当我删除RC522代码

我已经为Arduino Uno编写了以下代码,用于使用RC522模块和ESP8266模块扫描RFID卡,以连接到我的路由器

现在,当我扫描任何一张卡时,它应该读取卡号并向我的服务器的IP地址发送一个请求并获得响应

但在成功读取RFID卡后,通过TCP与服务器的连接不起作用:

esp.println("AT+CIPSTART=\"TCP\",\"" + server + "\",80");//start a TCP connection.
因此,我无法向服务器发送请求

但是当我删除RC522代码(用于测试)时,它正在工作

同时使用RC522和ESP8266有什么问题

#include <SPI.h>
#include <MFRC522.h>
#include "SoftwareSerial.h"

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

//I2C pins declaration
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

#define SS_PIN 9
#define RST_PIN 7
#define mainLock 2


String ssid = "MYSSID";
String password = "PASSWORD";

SoftwareSerial esp(2, 3);// RX, TX
String server = "192.168.1.102"; //Your Host
String uri = "/get_data.php?rfid_key=";

//#define LED_G 4 //define green LED pin
//#define LED_R 5 //define red LED
#define BUZZER 6 //buzzer pin

MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance.

String rfidUid = "";

#define DEBUG true

void setup()
{
  //  Serial.begin(9600);   // Initiate a serial communication

  esp.begin(9600);

  Serial.begin(9600);

  SPI.begin();      // Initiate  SPI bus
  mfrc522.PCD_Init();   // Initiate MFRC522

  connectWifi();

  httpget();

  delay(1000);

  Serial.println("Put your card to the reader...");
  Serial.println();

  pinMode(mainLock, OUTPUT);

  lcd.begin(16, 2); //Defining 16 columns and 2 rows of lcd display
  lcd.backlight();//To Power ON the back light

}

void connectWifi() {

  sendData("AT+RST\r\n", 2000, DEBUG);          //This command will reset module to default
  sendData("AT+CWMODE=3\r\n", 1000, DEBUG);

  String cmd = "AT+CWJAP=\"" + ssid + "\",\"" + password + "\"";

  esp.println(cmd);

  delay(4000);

  if (esp.find("OK")) {
    Serial.println("Connected!");
  }
  else {
    Serial.println("Cannot connect to wifi ! Connecting again...");
    connectWifi();
  }


}

/////////////////////////////GET METHOD///////////////////////////////
void httpget() {
//  // Look for new cards
  if ( ! mfrc522.PICC_IsNewCardPresent())
  {
   return;
  }
  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial())
  {
   return;
  }

  //Show UID on serial monitor
  Serial.print("UID tag :");
  String content = "";
  byte letter;

  rfidUid = "";
  for (byte i = 0; i < mfrc522.uid.size; i++)
  {
    Serial.print(mfrc522.uid.uidByte < 0x10 ? " 0" : " ");
    Serial.print(mfrc522.uid.uidByte, HEX);
    content.concat(String(mfrc522.uid.uidByte < 0x10 ? " 0" : " "));
   content.concat(String(mfrc522.uid.uidByte, HEX));

    rfidUid += String(mfrc522.uid.uidByte < 0x10 ? "0" : "");
   rfidUid += String(mfrc522.uid.uidByte, HEX);

  }

  Serial.println();
  content.toUpperCase();

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(rfidUid);

  esp.println("AT+CIPSTART=\"TCP\",\"" + server + "\",80");//start a TCP connection.

  if ( esp.find("OK")) {

    Serial.println("TCP connection ready");

  } delay(1000);

     if ( esp.find("OK")) {

    Serial.println("TCP connection ready");

    } delay(1000);

    String getRequest =
      "GET " + uri + rfidUid + " HTTP/1.0\r\n" +
      "Host: " + server + "\r\n" +
      "Accept: *" + "/" + "*\r\n" +
      "Content-Type: text/plain\r\n" +
      "\r\n";

   String sendCmd = "AT+CIPSEND=";

   esp.print(sendCmd);

    esp.println(getRequest.length());

  delay(500);

   if (esp.find(">")) {

     Serial.println("Sending..");

      esp.print(getRequest);

      if (esp.find("SEND OK")) {

        Serial.println("Packet sent");

        while (esp.available()) {

         String response = esp.readString();

         Serial.println("response.." + response);

        }
        esp.println("AT+CIPCLOSE");
     }
   }

}

void loop()
{
  httpget();


}


String sendData(String command, const int timeout, boolean debug) // Function to send the data to the esp8266
{
  String response = "";
  esp.print(command);           // Send the command to the ESP8266
  long int time = millis();
  while ( (time + timeout) > millis()) // ESP8266 will wait for some time for the data to receive
  {
    while (esp.available())     // Checking whether ESP8266 has received the data or not
    {
      char c = esp.read();      // Read the next character.
      response += c;                // Storing the response from the ESP8266
    }
  }
  if (debug)
  {
    Serial.print(response);         // Printing the response of the ESP8266 on the serial monitor.
  }
  return response;
}
#包括
#包括
#包括“SoftwareSerial.h”
#包括
#包括
//I2C引脚声明
液晶I2C液晶显示器(0x3F,2,1,0,4,5,6,7,3,正极);
#定义SS_引脚9
#定义RST_引脚7
#定义主锁2
字符串ssid=“MYSSID”;
字符串password=“password”;
软件串行esp(2,3);//接收,发送
String server=“192.168.1.102”//你的主人
字符串uri=“/get_data.php?rfid_key=“;
//#定义LED_G 4//定义绿色LED引脚
//#定义LED\u R 5//定义红色LED
#定义蜂鸣器6//蜂鸣器引脚
MFRC522 MFRC522(不锈钢插脚、RST插脚);//创建MFRC522实例。
字符串rfidUid=“”;
#定义调试为真
无效设置()
{
//Serial.begin(9600);//启动串行通信
特别是贝京(9600);
Serial.begin(9600);
SPI.begin();//启动SPI总线
mfrc522.PCD_Init();//初始化mfrc522
连接WiFi();
httpget();
延迟(1000);
Serial.println(“将您的卡放入读卡器…”);
Serial.println();
pinMode(主锁,输出);
begin(16,2);//定义液晶显示器的16列和2行
lcd.backlight();//打开背光
}
void connectWifi(){
sendData(“AT+RST\r\n”,2000,DEBUG);//此命令将模块重置为默认值
sendData(“AT+CWMODE=3\r\n”,1000,调试);
String cmd=“AT+CWJAP=\”“+ssid+”\”,\”“+password+“\”;
特别是println(cmd);
延迟(4000);
如果(特别是查找(“确定”)){
Serial.println(“已连接!”);
}
否则{
Serial.println(“无法连接到wifi!再次连接…”);
连接WiFi();
}
}
/////////////////////////////获取方法///////////////////////////////
void httpget(){
////寻找新卡
如果(!mfrc522.PICC_IsNewCardPresent())
{
返回;
}
//选择一张卡片
如果(!mfrc522.PICC_ReadCardSerial())
{
返回;
}
//在串行监视器上显示UID
Serial.print(“UID标签:”);
字符串内容=”;
字节字母;
rfidUid=“”;
for(字节i=0;i”){
Serial.println(“发送…”);
esp.print(getRequest);
如果(特别是查找(“发送确定”)){
Serial.println(“发送的数据包”);
while(特别是available()){
字符串响应=尤其是readString();
Serial.println(“响应..”+响应);
}
特别是println(“AT+CIPCLOSE”);
}
}
}
void循环()
{
httpget();
}
String sendData(String命令,const int timeout,boolean debug)//函数将数据发送到esp8266
{
字符串响应=”;
esp.print(command);//将命令发送到ESP8266
长整数时间=毫秒();
while((time+timeout)>millis())//ESP8266将等待一段时间以接收数据
{
while(esp.available())//检查ESP8266是否收到数据
{
char c=esp.read();//读取下一个字符。
response+=c;//存储来自ESP8266的响应
}
}
如果(调试)
{
Serial.print(response);//在串行监视器上打印ESP8266的响应。
}
返回响应;
}

论坛链接-

不幸的是,您没有显示正在工作的代码(部分为TCP连接)与未工作的代码(完全或仅为TCP连接?)之间的差异

当我删除Rc522代码测试,然后它是工作

试着描述一下什么是有效的,什么不是更详细一点。您还可以提供调试输出并添加一些注释

此外,我会尝试删除更多不必要的代码(如显示器),以帮助缩小原因。这可能已经让您走上了正确的轨道,可以自己修复它,但这也会让您的代码更容易阅读(尽管我怀疑许多人可能有准确的部分来重现您的问题,但您可能会幸运)

但是,根据您提供的代码,这里只是一个猜测:

Arduino可能没有从ESP8266模块接收数据,因为您正在将RX引脚重新配置为输出(但您没有使用它!?):

与冲突

SoftwareSerial esp(2, 3);// RX, TX

因此,我建议您仔细检查您的pin使用和连接(同时,提供此信息会增加您发现错误的机会)。

您使用的是哪个Liquidcystal_I2C库?@gre_gor-我使用的是什么?您的接线是什么?这只是一个猜测,因为没有接线的图片,但是,尽管ESP8266体积庞大,但它还是相当耗电。如果没有
SoftwareSerial esp(2, 3);// RX, TX