带有ESP8266的RC522不工作Arduino uno
我已经为Arduino Uno编写了以下代码,用于使用RC522模块和ESP8266模块扫描RFID卡,以连接到我的路由器 现在,当我扫描任何一张卡时,它应该读取卡号并向我的服务器的IP地址发送一个请求并获得响应 但在成功读取RFID卡后,通过TCP与服务器的连接不起作用:带有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代码
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