完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好,
在我的项目中,我在 ESP8266 上使用了 RC522 RFID 模块和 SSD1306 OLED 显示器。当在 RFID 模块上检测到 RFID 标签时,我希望在屏幕上显示一些内容。 RFID 模块和 OLED 显示器都可以工作,但只能单独工作。如果我同时使用两者,例如在检测到 RFID 标签后我想在屏幕上显示文本,它就不起作用。 当然,问题出在屏幕和 RFID 阅读器使用相同的引脚。两者都用于 ESP8266 上的 SDA PIN D2 和 SCK PIN D1。不同的协议似乎相互干扰。但是,直到某个时候。所以我可以在 setup() 中在屏幕上显示一些东西,然后使用 RFID 模块。但是,使用RFID模块后,我无法在屏幕上显示任何内容。当我尝试时,RFID 模块在那之后没有工作。 我的解决方案想法是在通过 I2C 通信之前结束与 SPI.endTransaction() 的 SPI 通信,反之在使用 SPI 之前结束与 Wire.endTransmission() 的 I2c 通信。也想到了相应的启动命令。但是,它不起作用。 我很好奇是否有一个简单的解决方案。经过几个小时的谷歌,我没有找到一个。正如您可能会说的那样,我对微电子学还比较陌生。 我期待着答案,并提前非常感谢你。 这是我的项目的代码(特别是见最后一种方法): 代码:全选//RFID-MODUL #define RST_PIN 5 #define SS_PIN 4 #include #include MFRC522 mfrc522(SS_PIN, RST_PIN); //OLED-DISPLAY #include #include #include #define OLED_RESET -1 #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); //REST-API #include #include #include // Replace with your network credentials const char* ssid = "**********"; const char* password = "*******************"; const char* serverName = "*******************/*************/post-esp-data.php"; String apiKeyValue = "jhgdku7t7liu"; String sensorName = "RFID-Reader"; String sensorLocation = "Office"; void setup() { //OLED-DISPLAY Serial.begin(115200); //RFID-MODUL SPI.begin(); mfrc522.PCD_Init(); //REST-API WiFi.begin(ssid, password); Serial.println("Connecting"); while(WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to WiFi network with IP Address: "); Serial.println(WiFi.localIP()); } void loop() { //RFID-MODUL if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } if ( ! mfrc522.PICC_ReadCardSerial()) { return; } Serial.println(); Serial.print(" UID tag :"); String content= ""; 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)); } content.toUpperCase(); Serial.println(); Serial.print(" PICC type: "); MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); Serial.println(mfrc522.PICC_GetTypeName(piccType)); if (content.substring(1) == "39 7B 02 64" || content.substring(1) == "B2 38 DB 0E") { accessGranted(); } else { accessRefused(); } //REST-API if(WiFi.status()== WL_CONNECTED){ WiFiClient client; HTTPClient http; http.begin(client, serverName); http.addHeader("Content-Type", "application/x-www-form-urlencoded"); String httpRequestData = "api_key=" + apiKeyValue + "&uid=" + content + "&location=" + sensorLocation + "&value1=" + content + "&value2=" + "test" + "&value3=" + "test"; int httpResponseCode = http.POST(httpRequestData); if (httpResponseCode>0) { Serial.print("HTTP Response code: "); Serial.println(httpResponseCode); } else { Serial.print("Error code: "); Serial.println(httpResponseCode); } // Free resources http.end(); } else { Serial.println("WiFi Disconnected"); } //Send an HTTP POST request every 30 seconds delay(1000); } //RFID-MODUL void accessGranted() { Serial.println(" Access Granted "); Serial.println(); delay(300); } void accessRefused() { SPI.endTransaction(); Wire.begin(); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // I2C address = 0x3C delay(1000); display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0, 0); display.print("Access Refused"); display.display(); Wire.endTransmission(); Serial.println(" Access Refused "); delay(300); } |
|
相关推荐
1个回答
|
|
这可能是因为你的 OLED 显示器使用的是 I2C 协议,而 RC522 RFID 模块使用的是 SPI 协议,这两者的引脚是相同的,因此会发生冲突。你可以尝试使用不同的引脚来避免这种冲突。
另外,你可以使用软件 I2C 或软件 SPI 这样的库来模拟这些协议,并将它们分别连接到不同的引脚上,这将使两者在 ESP8266 上同时协同工作成为可能。 最后,你也可以使用一个双口 RAM,在其中一个口输出 OLED 显示器,另一个口输出 RFID 模块,从而避免引脚冲突的问题。 希望这可以帮助到你。 |
|
|
|
只有小组成员才能发言,加入小组>>
232个成员聚集在这个小组
加入小组568 浏览 1 评论
2698 浏览 2 评论
为blufi_device设置自定义名称,但是无法修改,为什么?
496浏览 4评论
请问ESP32-S2-WROOM怎么获得ESP32-S2外接FLASH的唯一序列号?
274浏览 3评论
1094浏览 3评论
ESP-Jumpstart例程中第5个工程:5_cloud连接报错是哪里的问题?
286浏览 2评论
用AT+CIPSNTPCFG=1,8,\"cn.ntp.org.cn\",\"ntp.sjtu.edu.cn\"更新不了时间怎么处理?
775浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-5-15 12:20 , Processed in 0.902812 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191