Lecture signal sur une pin

Bonjour,

Dans le cadre d'un projet effectué pour l'université, je souhaite réaliser un lecteur de code barre relié à un ESP32. J'ai donc besoin de pouvoir lire les données retournées par le lecteur. Pour cela je souhaiterai le câbler en liaison série sur mon ESP (branché sur des pins, en l’occurrence 16 et 17), j'observe bien mon signal à l'aide d'un oscilloscope lorsque je me câble sur ces pins.

Lors de la lecture, j'utilise la bibliothèque SoftwareSerial, mais malheureusement, lors de la compilation (en utilisant le programme d'exemple) j'ai une erreur permanente : [u]fatal error: avr/interrupt.h: No such file or directory[/u] qui vient du dossier SofwareSerial.cpp

Je ne sais pas comment le résoudre, auriez-vous une solution pour résoudre ce problème ? Ou auriez vous un autre moyen de récupérer mes données ?

Merci d'avance de votre aide.

Votre ESP n’est pas un processeur AVR, il faut utiliser dans l’absolu une autre librairie Software Serial pour ESP (le lien c’est la première sur laquelle je suis tombé) mais dans votre cas pourquoi passer par Software Serial alors que vous pouvez utiliser un second port série matériel sur votre ESP ?

Bonjour,

Pourquoi utiliser SoftwareSerial alors que le ESP32 a 3 UARTs? Pour voir comment les utiliser chercher esp32 serial sur google.

Si ton lecteur de code barre sort en RS232, il te faut un adaptateur RS232 -> niveau logique 3.3V

@J-M-L Le lien de votre librairie est le même que celle que j'utilise malheureusement. Je ne comprends pas ce que vous entendez par utiliser un deuxième port série ?

@kamill effectivement, je n'avais pas pensé à l'UART je vais chercher afin de voir si une solution fonctionne pour mon cas.

AlexisDut: @J-M-L Le lien de votre librairie est le même que celle que j'utilise malheureusement. Je ne comprends pas ce que vous entendez par utiliser un deuxième port série ?

Le fait que votre erreur soit fatal error: [color=red][b]avr[/b][/color]/interrupt.h... me fait penser que non...le linker / compilateur prend celle pour les arduinos standard on dirait

AlexisDut: @J-M-L Je ne comprends pas ce que vous entendez par utiliser un deuxième port série ?

La même chose que ce que vous comprenez sur le post de Kamill :)

Ce que je ne comprends pas car je l'ai dans les librairies mais aussi dans le hardware (aussi dans un dossier lib).

Je vais donc continuer mes recherches dans ce cas pour l'UART.

UART = Universal Asynchronous Receiver Transmitter

C'est la liaison qu'on appelle par habitude la "liaison série". Elle utilise le protocole de transmission de la RS232. Attention seulement le protocole de transmission et absolument pas les niveaux électriques. Selon la tension d'alimentation du microcontrôleur l'UART enverra des signaux d'amplitude 5V ou 3,3V.

Au début il y avait deux modes de transport des données : - Sur un seul fil = liaison série. Les bits étaient envoyés les uns derrière les autres selon un certain protocole. - Sur N fils en parallèle = liaison parallèle. Les bits étaient tous envoyés en même temps.

Les liaisons parallèles ont complètement disparues, elles ne supportaient pas des fréquences élevées --> si les bits étaient envoyés en même temps il était impossible de garantir qu'ils arriveraient en même temps. Actuellement toutes les liaisons émettent les bits en série sur un seul fil de donnée : UART , USB, I2C, SPI, CAN, etc

AlexisDut:
Ce que je ne comprends pas car je l’ai dans les librairies mais aussi dans le hardware (aussi dans un dossier lib).

vous avez mis #include [color=green][b]<[/b][/color]SoftwareSerial.h[color=green][b]>[/b][/color] ou #include [b][color=red]"[/color][/b]SoftwareSerial.h[color=red][b]"[/b][/color] dans le code ?

Mais bon - la bonne solution c’est de passer avec un autre port Série matériel - c’est quel ESP32 exactement que vous avez ?

C’est un #include que j’utilise dans mon code. J’ai l’ESP WROOM-32

est-ce que vous avez 2 pins nommées Rx et Tx sur la carte ?

Oui j'ai essayé comme ça, le problème est que mes signaux disparaissent lorsque je scanne avec mon lecteur (avec cette ligne là : Serial2.begin(115200,SERIAL_8N1, 16, 17);).

J'ai des pins TXD et RXD sur mon ESP.

si vous essayez ce code, ça dit quoi:

#include <HardwareSerial.h>

HardwareSerial lecteurSerie(1);

void setup() {
  Serial.begin(115200);
  lecteurSerie.begin(9600, SERIAL_8N1, 16, 17); // mettre le bon débit en BAUD
}

void loop() {
  while (lecteurSerie.available() > 0) {
    int c = lecteurSerie.read();
    if (c != -1) Serial.write((char) c);
  }
}

Mes signaux disparaissent aussi dans ce cas. lorsque j’enleve cette ligne : lecteurSerie.begin(9600, SERIAL_8N1, 16, 17); // mettre le bon débit en BAUD
mes signaux ne sautent plus, je suppose donc que le problème vient d’ici.

Vous voulez dire quoi par "Mes signaux disparaissent" ? ils disparaissent d'où ?

c'est bien du 3.3V que vous balancez ?

Les signaux rx et tx sont bien croisés?

Ils disparaissent de l'osciloscope me permettant d'observer l'évolution. C'est du 5V il me semble. Pour ce qui est du croisement, je n'ai que 2 fils (données + et données -) car c'est une sortie USB que je branche sur les pins 16 et 17.

votre ESP ne supporte que le 3.3V il me semble… à vérifier si vos pins fonctionnent encore… (mettez une LED en OUTPUT (pin ---- R220Ω ---- LED — GND) avec une résistance et vérifiez que vous pouvez l’allumer et l’éteindre et mettez un bouton en INPUT_PULLUP (pin — bouton — GND) et vérifiez que le digitalRead() fonctionne

Pour ce qui est du croisement, je n'ai que 2 fils (données + et données -) car c'est une sortie USB que je branche sur les pins 16 et 17.

D+ et D- !!! si je comprend bien il s'agit d'une tentative de connection directe de signaux USB à un ESP32.... sans espoir....

Pour cela je souhaiterai le câbler en liaison série sur mon ESP (branché sur des pins, en l'occurrence 16 et 17),

Cette phase a créé l'équivoque.

l'ESP32 sait faire beaucoup de choses , mais pas la gestion directe de signaux USB. l'ESP32 seul ne peut être ni hôte ni device USB. (Un jour peut être quelqu'un saura bricoler quelque chose en 'bit banging' come cela a été fait pour le µC AVR)

Eviter d'envoyer des signaux 5V à un ESP32, il n'est pas conçu pour ça..... Certains ESP32 peuvent survivre .....plus ou moins longtemps ......le fabricant a dégagé sa responsabilité via la notice technique de la puce.

Si le lecteur de code barre de ne fournit ses infos que par une sortie USB il doit être raccordé à un hôte USB doté du bon driver (double condition)

Vous avez un lien vers votre lecteur de code barre ??

Voilà le lien de mon lecteur : https://www.amazon.fr/Barcode-Scanner-Filaire-Pistolet-Compatible/dp/B0736NNZNV/ref=sr_1_2_sspa?s=officeproduct&ie=UTF8&qid=1542721322&sr=1-2-spons&keywords=lecteur+code+barre&psc=1 https://www.ebay.fr/i/163025473235?chn=ps&dispItem=1

Il y a très peu d'indication concernant le fonctionnement.

Je ne pourrai donc jamais récupérer mes données ? (je viens de vérifier c'est du 3.3V qui est envoyé sur l'ESP). J'avais essayé en utilisant un module USB to TTL : https://fr.banggood.com/FT232RL-FTDI-USB-To-TTL-Serial-Converter-Adapter-Module-For-Arduino-p-917226.html?akmClientCountry=FR&gmcCountry=FR¤cy=EUR&createTmp=1&utm_source=googleshopping&utm_medium=cpc_bgcs&utm_content=zouzou&utm_campaign=pla-frg-all-pc&cur_warehouse=CN Mais je n'avais plus de signal en sortie du module.