Skocz do zawartości

Problem z pinem MISO na nodeMCU


SOYER

Pomocna odpowiedź

(edytowany)
Dnia 19.11.2022 o 10:37, SOYER napisał:

Dobra, wygląda, że opanowane. Po długich i irytuąjcych nieudanych próbach, po których byłem pewny, że mam uszkodzone ESP32, znalazłem bibliotekę która obsługuje RC522 i moje ESP32. Dla  potomnych, to ta. Działa na HSPI i VSPI, działa przypisywanie pinów. Później sprawdzę, dwa rfid na jednej lini SPI i dwóch pinach SS. [EDIT] dwa czytniki rfid na tej samej magistrali HSPI też działają na tej bibliotece:).

Teraz muszę się odstresować.

Przy okazji, mam ESP32 wroom, w którym podczas wgrywania softu muszę przytrzymać BOOST, podobno da się to załatwić jakimś kondensatorem między EN i coś tam. Jak to ogarnąć, żeby nic nie uszkodzić?

Cześć, to napisałem prawie miesiąc temu, działało. dzisiaj nie działa.

Już chciałem przelutowywać do pinów VSPI, ale przypomniałem sobie słowa @ethanak "czemu nie zapytałeś". No to pytam. Kto pomoże mi zmusić mfrc522 do współpracy z pinami HSPI w esp32. Zaręczam, że poniższy kod działał, a teraz nie działa. Mało tego, dopóki nie wytnę z linijki

 mfrc522[reader].PCD_Init(ssPins[reader], RST_PIN);

pinu reset, czyli nie zrobię

 mfrc522[reader].PCD_Init(ssPins[reader]);

to szkic wcale nie rusza...

a jak już ruszy po wywaleniu tego piny reset(mam go niepodłączony fizycznie) to wywala błąd, że rfid nie podłączone.

To szkic z przykładów biblioteki który mi działał:

/**
 * --------------------------------------------------------------------------------------------------------------------
 * Example sketch/program showing how to read data from more than one PICC to serial.
 * --------------------------------------------------------------------------------------------------------------------
 * This is a MFRC522 library example; for further details and other examples see: https://github.com/miguelbalboa/rfid
 *
 * Example sketch/program showing how to read data from more than one PICC (that is: a RFID Tag or Card) using a
 * MFRC522 based RFID Reader on the Arduino SPI interface.
 *
 * Warning: This may not work! Multiple devices at one SPI are difficult and cause many trouble!! Engineering skill
 *          and knowledge are required!
 *
 * @license Released into the public domain.
 *
 * Typical pin layout used:
 * -----------------------------------------------------------------------------------------
 *             MFRC522      Arduino       Arduino   Arduino    Arduino          Arduino
 *             Reader/PCD   Uno/101       Mega      Nano v3    Leonardo/Micro   Pro Micro
 * Signal      Pin          Pin           Pin       Pin        Pin              Pin
 * -----------------------------------------------------------------------------------------
 * RST/Reset   RST          9             5         D9         RESET/ICSP-5     RST
 * SPI SS 1    SDA(SS)      ** custom, take a unused pin, only HIGH/LOW required **
 * SPI SS 2    SDA(SS)      ** custom, take a unused pin, only HIGH/LOW required **
 * SPI MOSI    MOSI         11 / ICSP-4   51        D11        ICSP-4           16
 * SPI MISO    MISO         12 / ICSP-1   50        D12        ICSP-1           14
 * SPI SCK     SCK          13 / ICSP-3   52        D13        ICSP-3           15
 *
 * More pin layouts for other boards can be found here: https://github.com/miguelbalboa/rfid#pin-layout
 *
 */

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

#define RST_PIN         9          // Configurable, see typical pin layout above
#define SS_1_PIN        15        // Configurable, take a unused pin, only HIGH/LOW required, must be different to SS 2
#define SS_2_PIN        27         // Configurable, take a unused pin, only HIGH/LOW required, must be different to SS 1

#define NR_OF_READERS   2

byte ssPins[] = {SS_1_PIN, SS_2_PIN};

MFRC522 mfrc522[NR_OF_READERS];   // Create MFRC522 instance.

/**
 * Initialize.
 */
void setup() {

  Serial.begin(19200); // Initialize serial communications with the PC
  while (!Serial);    // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)

  SPI.begin(14,12,13);        // Init SPI bus

  for (uint8_t reader = 0; reader < NR_OF_READERS; reader++) {
    mfrc522[reader].PCD_Init(ssPins[reader], RST_PIN); // Init each MFRC522 card
    Serial.print(F("Reader "));
    Serial.print(reader);
    Serial.print(F(": "));
    mfrc522[reader].PCD_DumpVersionToSerial();
  }
}

/**
 * Main loop.
 */
void loop() {

  for (uint8_t reader = 0; reader < NR_OF_READERS; reader++) {
    // Look for new cards

    if (mfrc522[reader].PICC_IsNewCardPresent() && mfrc522[reader].PICC_ReadCardSerial()) {
      Serial.print(F("Reader "));
      Serial.print(reader);
      // Show some details of the PICC (that is: the tag/card)
      Serial.print(F(": Card UID:"));
      dump_byte_array(mfrc522[reader].uid.uidByte, mfrc522[reader].uid.size);
      Serial.println();
      Serial.print(F("PICC type: "));
      MFRC522::PICC_Type piccType = mfrc522[reader].PICC_GetType(mfrc522[reader].uid.sak);
      Serial.println(mfrc522[reader].PICC_GetTypeName(piccType));

      // Halt PICC
      mfrc522[reader].PICC_HaltA();
      // Stop encryption on PCD
      mfrc522[reader].PCD_StopCrypto1();
    } //if (mfrc522[reader].PICC_IsNewC
  } //for(uint8_t reader
}

/**
 * Helper routine to dump a byte array as hex values to Serial.
 */
void dump_byte_array(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], HEX);
  }
}

Link do biblioteki macie w moim cytowaniu. Ja się poddałem i już chciałem przelutowywać do VSPI, ale mówię zapytam.

Robiłem też dziwne rzeczy z tego poradnika: https://randomnerdtutorials.com/esp32-spi-communication-arduino/,   nie działa, albo ja nie umiem.

Czytałem też o tym problemie min tu: https://github.com/miguelbalboa/rfid/pull/520 to strona twórcy tej biblioteki, ale też bez powodzenia.

:((

 

Co do dziwnych dźwięków przy SIM800l, to przeniesienie go na osobną plytkę, praktycznie w 95% ograniczyło przydźwięki. dzięki @_LM_.

Edytowano przez SOYER
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dobra, tą linijkę:

MFRC522 mfrc522[NR_OF_READERS]; 

zastąpiłem tą:

MFRC522* mfrc522 = new MFRC522[NR_OF_READERS];  

wywaliłem ww. rst_pin i znowu ten sam komunikat czyli:

Reader 0: Firmware Version: 0x0 = (unknown)
19:49:20.072 -> WARNING: Communication failure, is the MFRC522 properly connected?
19:49:20.072 -> Reader 1: Firmware Version: 0xEE = (unknown)
 

Link do komentarza
Share on other sites

15 minut temu, SOYER napisał:

co to znaczy?

Bez wnikania w szczegóły (fragment mojego kodu):

Adafruit_ILI9341 tft(&SPI1,DSP_DC, DSP_CS, DSP_RST);

void setup()
{
    SPI.begin(DSP_SCK, -1, DSP_MOSI, DSP_CS);
    SPI.setFrequency(16000000);
    tft.begin();
    

To nie działa.

Adafruit_ILI9341 *tft;

void setup()
{
    SPI.begin(DSP_SCK, -1, DSP_MOSI, DSP_CS);
    SPI.setFrequency(16000000);
    tft = new Adafruit_ILI9341(DSP_CS, DSP_DC, DSP_RST);
    tft->begin();

A to działa.

Link do komentarza
Share on other sites

27 minut temu, SOYER napisał:

Coś takiego zrobiłem

I to Ci się w ogóle skompilowało???

Coś takiego (na rybkę):

MFRC522* mfrc522[NR_OF_READERS];

void setup()
{
    int i;
    SPI.begin(<tu wstaw piny>);
    for (i=0;i<NR_OF_READERS;i++) {
        mrfc522[i] = new MRC522();
        mrfc533[i]->PCD_Init(ssPins[i], RST_PIN);
        printf("Reader: %d ",i);
        mfrc522[i].PCD_DumpVersionToSerial();
  

Jak nie przejdzie to jutro spróbuję coś takiego zmontować, akurat wszystko co trzeba powinienem mieć, ale dzisiaj trochę nie mam czasu.

Link do komentarza
Share on other sites

Kilka literówek w tym miałeś, co poprawiłem, dodatkowo zamieniłem kropki na strzałki w reszcie kodu, skompilowało się 🙂 :


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

#define RST_PIN         9          // Configurable, see typical pin layout above
#define SS_1_PIN        15        // Configurable, take a unused pin, only HIGH/LOW required, must be different to SS 2
#define SS_2_PIN        27         // Configurable, take a unused pin, only HIGH/LOW required, must be different to SS 1

#define NR_OF_READERS   2

byte ssPins[] = {SS_1_PIN, SS_2_PIN};

//MFRC522 mfrc522[NR_OF_READERS];   // Create MFRC522 instance.
MFRC522* mfrc522[NR_OF_READERS];
/**
 * Initialize.
 */
void setup() {

  Serial.begin(9600); // Initialize serial communications with the PC
  while (!Serial);    // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)

  SPI.begin(14,12,13);        // Init SPI bus

 for (int i=0;i<NR_OF_READERS;i++) {
        mfrc522[i] = new MFRC522();
        mfrc522[i]->PCD_Init(ssPins[i]);
        printf("Reader: %d ",i);
        mfrc522[i]->PCD_DumpVersionToSerial();}
}

/**
 * Main loop.
 */
void loop() {

  for (uint8_t reader = 0; reader < NR_OF_READERS; reader++) {
    // Look for new cards

    if (mfrc522[reader]->PICC_IsNewCardPresent() && mfrc522[reader]->PICC_ReadCardSerial()) {
      Serial.print(F("Reader "));
      Serial.print(reader);
      // Show some details of the PICC (that is: the tag/card)
      Serial.print(F(": Card UID:"));
      dump_byte_array(mfrc522[reader]->uid.uidByte, mfrc522[reader]->uid.size);
      Serial.println();
      Serial.print(F("PICC type: "));
      MFRC522::PICC_Type piccType = mfrc522[reader]->PICC_GetType(mfrc522[reader]->uid.sak);
      Serial.println(mfrc522[reader]->PICC_GetTypeName(piccType));

      // Halt PICC
      mfrc522[reader]->PICC_HaltA();
      // Stop encryption on PCD
      mfrc522[reader]->PCD_StopCrypto1();
    } //if (mfrc522[reader].PICC_IsNewC
  } //for(uint8_t reader
}

/**
 * Helper routine to dump a byte array as hex values to Serial.
 */
void dump_byte_array(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], HEX);
  }
}

ale nie działa:(

ten sam komunikat.

Link do komentarza
Share on other sites

Aha, wcale się nie dziwię że nie działa.

Fragment pliku MFRC522.h

/////////////////////////////////////////////////////////////////////////////////////
	// Functions for setting up the Arduino
	/////////////////////////////////////////////////////////////////////////////////////
	MFRC522();
	MFRC522(byte resetPowerDownPin);
	MFRC522(byte chipSelectPin, byte resetPowerDownPin);

Więc  co robi Twoim zdaniem linijka z programu:

mfrc522[i]->PCD_Init(ssPins[i]);

I czym się różni od mojej:

mrfc533[i]->PCD_Init(ssPins[i], RST_PIN);

 

BTW po przejrzeniu pobieżnym kodu stwierdziłem, że to powinno działać również ze statycznymi tablicami (inicjalizator nie robi nic oprócz przypisania pinów).

 

  • Lubię! 1
Link do komentarza
Share on other sites

Tylko pisałem, że jeśli mam tego rst to program wogóle nie rusza. Mam pod rst przypisany pin 9,  choć fizycznie do rfid nie mam podpięte, ale nie pamiętam co mam od strony esp. Może to jest problem, jutro sprawdzę z innym przypisaniem. Prosta sprawa, a nie sprawdziłem.

Link do komentarza
Share on other sites

31 minut temu, SOYER napisał:

Może to jest problem

Problem jest w nieprawidłowym konstruktorze. Jeśli jest jeden parametr, oznacza to właśnie RST (co mogłeś doczytać), a SS jest brany domyślny (czyli na 100% nie ten co trzeba, co też mogłeś doczytać, ale po co, lepiej zawracać głowę na forum).

Jeśli nie chcesz podawać RST, użyj MFRC522::UNUSED_PIN (czy jakoś tak). A poza tym czytaj przynajmniej pliki nagłówkowe bibliotek które stosujesz, bo potem wychodzą takie bzdury jak wyżej.

 

  • Lubię! 1
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.