Hallo,
Ik probeer een rc522 Rfid lezer te programmeren met een esp32 met JavaScript. Ik gebruik hiervoor een esp33 met Espruino firmware. Ik krijg echter foutmelding op de code rc522.findCard en ik vermoed dat ik een libary voor rc522 nodig heb. Kan iemand me verder helpen?
Gebruikte code:
// Laad de MFRC522-bibliotheek
var MFRC522 = require("MFRC522");
// Stel de SPI-communicatie in
var spi = new SPI();
spi.setup({ sck: D18, miso: D19, mosi: D23 });
// Initialiseer de RC522-module
var rc522 = new MFRC522(spi, D22 /* SS */);
// Functie om continu RFID-tags te scannen
function scanRFID() {
rc522.findCard(function (card) {
if (card) {
console.log("Kaart gedetecteerd:", card);
// Lees de UID van de kaart
rc522.getUid(function (uid) {
console.log("UID:", uid);
});
} else {
console.log("Geen kaart gedetecteerd");
}
});
}
// Start het scannen van RFID-tags elke seconde
setInterval(scanRFID, 1000);
Bedankt, Luk
// Laad de MFRC522-bibliotheek
var MFRC522 = require("MFRC522");
// Stel de SPI-communicatie in
var spi = new SPI();
spi.setup({ sck: D18, miso: D19, mosi: D23 });
// Initialiseer de RC522-module
var rc522 = new MFRC522(spi, D22 /* SS */);
// Functie om continu RFID-tags te scannen
function scanRFID() {
rc522.findCard(function (card) {
if (card) {
console.log("Kaart gedetecteerd:", card);
// Lees de UID van de kaart
rc522.getUid(function (uid) {
console.log("UID:", uid);
});
} else {
console.log("Geen kaart gedetecteerd");
}
});
}
// Start het scannen van RFID-tags elke seconde
setInterval(scanRFID, 1000);
Ik heb hem even in code tags gezet. En als je de regel met "var rc522 = new ...." nou onder de regel met function scanRFID() zet?
henri62
1-st law of Henri: De wet van behoud van ellende. 2-nd law of Henri: Ellende komt nooit alleen.
Op dinsdag 28 mei 2024 21:15:28 schreef K7Jz:En als je de regel met "var rc522 = new ...." nou onder de regel met function scanRFID() zet?
Dat kan niet, je creert dan elke keer een nieuw object en de code loopt geheid vast (het object wordt niet deleted). En de boel wordt elke keer opnieuw ge-initialiseerd, dat vraagt om ellende.
PS: De indentation klopt voor geen meter, de code is nog steeds niet leesbaar.
De functies zijn in elkaar genest? Lijkt me niet wenselijk.
Als de boel compileert/runt heb je de juiste libraries al neem ik aan?
Leuk, controllers programmeren in javascript. Die kende ik nog niet.
Volgens mij heb je de library voor die rc522 al in je systeem, anders had je al veel eerder een foutmelding gehad (zou ik denken).
Welke melding krijg je?
Indenting is belangrijk voor de leesbaarheid.
Dat ziet er dan bijv zo uit:
// Laad de MFRC522-bibliotheek
var MFRC522 = require("MFRC522");
// Stel de SPI-communicatie in
var spi = new SPI();
spi.setup( { sck: D18, miso: D19, mosi: D23 } );
// Initialiseer de RC522-module
var rc522 = new MFRC522(spi, D22 /* SS */);
// Functie om continu RFID-tags te scannen
function scanRFID()
{
rc522.findCard(function (card)
{ if (card)
{ console.log("Kaart gedetecteerd:", card);
// Lees de UID van de kaart
rc522.getUid(function (uid)
{ console.log("UID:", uid);
});
}
else
{ console.log("Geen kaart gedetecteerd");
}
});
}
// Start het scannen van RFID-tags elke seconde
setInterval(scanRFID, 1000);
Dit is een voorbeeld stukje op de website van Espruino, geeft dit dezelfde fout?
SPI1.setup({sck:B3, miso:B4, mosi:B5 });
var nfc = require("MFRC522").connect(SPI1, B2/*CS*/);
setInterval(function() {
nfc.findCards(function(card) {
print("Found card "+card);
card = JSON.stringify(card);
var leds = [LED1,LED2];
if (card=="[147,239,211,128]") digitalWrite(leds,1);
if (card=="[249,192,235,164]") digitalWrite(leds,2);
});
}, 1000);
Op woensdag 29 mei 2024 11:39:00 schreef bbuster:
Dit is een voorbeeld stukje op de website van Espruino, geeft dit dezelfde fout?SPI1.setup({sck:B3, miso:B4, mosi:B5 }); var nfc = require("MFRC522").connect(SPI1, B2/*CS*/); setInterval(function() { nfc.findCards(function(card) { print("Found card "+card); card = JSON.stringify(card); var leds = [LED1,LED2]; if (card=="[147,239,211,128]") digitalWrite(leds,1); if (card=="[249,192,235,164]") digitalWrite(leds,2); }); }, 1000);
Deze code is voor de controller die Espruino verdeelt, niet voor de Esp32
Maar gebruikt dezezelfde library (MFRC522). Function prototype geeft duidelijk aan dat de functie naam findCards is en niet findCard zoals jij gebruikt.
MFRC522.prototype.findCards = function(callback) {
// TODO: We can do this better I think - and can detect multiple cards
if (this.isNewCard()) {
callback(this.getCardSerial());
}
};
Ok, ik begin het libary concept te snappen… volgens dat ik hierover gevonden heb moet ik niets speciaals doen maar zorgt de MFRC522 = require("MFRC522") ervoor dat de juiste libary gedownload wordt, klopt dat?
Dat lijkt me niet. Zo een statement betekent alleen dat die library nodig is voor het programma. en die moet dan al beschikbaar zijn op je systeem. En dat zal ook wel zo zijn anders had je daar al een foutmelding gekregen.
Maar ik ben geen kenner van die espruino, Ik had er nog nooit van gehoord, dus ik kan het mis hebben.
Ik weet ook niet hoe dat Espruino werkt maar ik neem aan dat je iets gedownload hebt om je ESP mee te programmeren via Espruino (of wellicht via een webbased omgeving).
De "require" zal Espruino de informatie geven welke library je gebruikt en de software (of webbased omgeving) compilet deze library dan mee voor je ESP.
Maar werkt het met de findCards ipv findCard dan wel?
benleentje
Golden Member
Ik krijg echter foutmelding op de code
Het verbaasd me dat nog niemand dat gevraagd heeft en het is toch de meest belangrijke informatie.
Maar wat is exact de foutmelding.
CopyPaste dat eens.
Op woensdag 29 mei 2024 17:38:47 schreef Luk:
Ok, ik begin het libary concept te snappen… volgens dat ik hierover gevonden heb moet ik niets speciaals doen maar zorgt de MFRC522 = require("MFRC522") ervoor dat de juiste libary gedownload wordt, klopt dat?
Ja dat klopt helemaal daar vertel je welke lib er gebruikt moet worden.
var rc522 = new MFRC522(spi, D22 /* SS */);Hierboven maak je een nieuw object aan met de naam rc522. Hoe enw at het object kan staat is dan beschreven in de lib MFRC522. In dit geval blijkbaar een object wat weet hoe het een Rfid chip moet uitlezen.
Het mooie van zo een lib of object is dat je dus niet hoeft te weten hoe dat object precies werkt
rc522.findCard(function (card)Mis ik hier een haakje sluiten aan het eind en dus na card?
rc522.findCard(function (card))Niks mis met de sluithaakjes. Die staat 6 regels verder waar die parameter functie declaratie eindigt.
En die new is ook ergens voor nodig.
En die require gaat niks downloaden. Die library moet al aanwezig zijn.
SPI1.setup({sck:D18, miso:D19, mosi:D23 });
var nfc = require("MFRC522").connect(SPI1, D5/*CS*/);
setInterval(function() {
nfc.findCards(function(card) {
print("Found card "+card);
card = JSON.stringify(card);
var leds = [LED1,LED2];
if (card=="[147,239,211,128]") digitalWrite(leds,1);
if (card=="[249,192,235,164]") digitalWrite(leds,2);
});
console.log("function running");
}, 1000);
Het is al iets duidelijker geworden, maar ik krijg nu deze foutmelding
