RFID reader connected to NodeMCU via RS485 - Not Working - arduino

I want to connect a long range RFID card reader unit to NodeMCU (12E) board and read the card number. The RFID reader board has a RS485 output port and when I connect this board to my laptop using a RS485 to USB converter, I get the card number using a RealTerm/CoolTerm program.
I was just wondering how I can directly connect the RFID reader board to NodeMCU and read the card number.
I did the following so far, any help in this regard will be much appreciated -
Connected RFID board with a RS485 to USB converter
Used a female to female USB connector and connected (1) with NodeMCU at the other end(via micro usb port on NodeMCU)
Written a very simple arduino sketch to read the serial data as -
#define BUZZER 4
void setup() {
Serial.begin(9600); // Init Serial
}
void loop(){
if (Serial.available())
{
tone(BUZZER, 5000);
delay(1000);
noTone(BUZZER);
}
}
However, the buzzer gives no sound.
My questions are -
Is this the right way of reading data from the card reader via RS485 port ?
Why the data is not received in NodeMCU while I can see it on the terminal program on my laptop
Is there any arduino sketch that I can refer to to read the card number in NodeMCU ?

Related

Arduino Nano no serial communication SIM800C

I am trying to get my SIM800C to talk with my Arduino. There is no communication happening, though.
#include <SoftwareSerial.h>
SoftwareSerial at(2, 3);
void setup() {
Serial.begin(9600);
at.begin(9600);
}
void loop() {
// try every 2 seconds
delay(2000);
Serial.println("sending AT ... ");
at.println("AT");
while (at.available() > 0) {
Serial.write(at.read());
}
}
I am not able to get an OK back. SIM800C is supposed to detect the baud rate by itself.
I am sure there has to be a simple stupid mistake. I just don't know what to do at this point. I obviously already checked for cable break. Out of desperation I already tried to switch RX and TX. I also tried different baud rates (whatever is within the usual limitations of SoftwareSerial) but it should automatically detect it once a couple of AT commands got in anyway.
Weird enough, the pin PWX on the SIM800C needs to be hooked up to a GND to work. It started blinking every second now and is responding to AT commands.
Also it turned out that this specific module does not ship with autobauding enabled, as stated by the SIM800C documentation. The correct baud rate is 115200.
There are some problems you need to consider:
Use below sample code which transfers data between PC and SIM. Sometimes SIM module would go into power down state and won't respond on any AT command but would print some results in the serial monitor.
As already mentioned in comments it seems that your wiring is wrong and as you declared Software Serial as SoftwareSerial at(2, 3); which means pin 2 is Rx on Arduino and should connect to Tx pin of SIM and pin 3 is Tx on Arduino and should connect to Rx pin of SIM. Please don't mess with the pins and connect the pins like below correctly.
Arduino SIM
Rx 2 ----> Tx
Tx 3 ----> Rx
I'm not sure if you can power on SIM800 with a 500mA USB connector, make sure that use an external 1/2 A power supply for VCC of SIM module.
Look at the blink speed of SIM module if it connected and powered on it would blinky with 3 seconds delay and if it blinks fast, it means that it is being restarted. Also if SIM powered on correctly it would print some info like SIM READY, CALL READY, etc.
Try other baud rates like 115200 and see if you get anything on power on.
I put some macro definition to make pin mappings more clear.
#include <SoftwareSerial.h>
//SIM800 TX is connected to Arduino D2
#define SIM800_TX_PIN 2
//SIM800 RX is connected to Arduino D3
#define SIM800_RX_PIN 3
//Create software serial object to communicate with SIM800
SoftwareSerial serialSIM800(SIM800_TX_PIN,SIM800_RX_PIN);
void setup() {
//Begin serial comunication with Arduino and Arduino IDE (Serial Monitor)
Serial.begin(9600);
while(!Serial);
//Being serial communication witj Arduino and SIM800
serialSIM800.begin(9600);
delay(1000);
Serial.println("Setup Complete!");
}
void loop() {
//Read SIM800 output (if available) and print it in Arduino IDE Serial Monitor
if(serialSIM800.available()){
Serial.write(serialSIM800.read());
}
//Read Arduino IDE Serial Monitor inputs (if available) and send them to SIM800
if(Serial.available()){
serialSIM800.write(Serial.read());
}
}
Yes this module will not work in this configuration. There is a pin of V_TTL With 5V pin.. This pin enables the TTL logic converter of your GSM.. You have to connect this pin to 5V in case of arduino and to 3V in case of ESP8266.See the pin configuration here

SIM800L Cant Send Message

I have a SIM800L module.
I have configured my 800L SIM module, where I connect OUT+ on LM2596 to VCC on SIM800L and OUT- on LM2596 to GND on SIM800L. Besides that, I connect TX SIM800L to pin 2 Arduino and RX SIM800L to pin 3 Arduino
Then, After the source code is uploaded to the arduino mega 2560 board, the SIM800L module flashes 3 times every 3 seconds, sometimes also blinks 7 times every 3 seconds. So on.
And until now my SIM800L module cannot send messages. where is the problem? thanks please answered
First, you must double check that the modem is connected correctly and have enough power. To ensure that I always try to read the output serial of the modem in startup and make a call to it.
If modem starts correctly it should print some data in the serial output (with default settings) and some of them prints the power issues.
You can use the following example to creating a two-way communication between your host PC and the modem. In here I'm using Serial1 with pins 18, 19.
If I remember correctly the blinks should be every 3 seconds, and if it changes it means that modem is being restarted.
After that, you can send AT commands with your host PC and check the functions.
#include <SoftwareSerial.h>
#define serialSIM800 Serial1
void setup()
{
//Begin serial communication with Arduino and Arduino IDE (Serial Monitor)
Serial.begin(9600);
//wait on host serial
while (!Serial);
//Being serial communication with Arduino and SIM800
// you should double check the default baudrate of SIM800 and set it here
serialSIM800.begin(9600);
delay(1000);
Serial.println(“Setup Complete !”);
}
void loop()
{
//Read SIM800 output (if available) and print it in Arduino IDE Serial Monitor
if (serialSIM800.available())
{
Serial.write(serialSIM800.read());
}
//Read Arduino IDE Serial Monitor inputs (if available) and send them to SIM800
if (Serial.available())
{
serialSIM800.write(Serial.read());
}
}

Serial Communication over Desktop to Arduino

I have a USB 2 Serial adapter and the device is working fine. I see the device perfectly configured in my System.
I have connected the TX0 pin of Arduino to DB 2 pin (read pin) of the adapter. Below is my Arduino code:
int i = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
for(i=0;i<6;i++)
{
Serial.write('H');
delay(100);
}
}
But when I try to read thru terminal software of data received at my COM port I see some junk character incoming. I am pretty sure that I am using same baud rate / flow setting both side. Why am I facing this issue - do I need to connect any other pins also as I just need to receive data at system side?
You should connect the ground pin with the ground pin
Arduino Communicate with Ur computer using pins 0 and 1( Tx0 and Rx0)
you shouldn't be connected to the Tx0 pin to another serial device because arduino use it to communicate with computer.
if you are using Uno. Check for Software Serial. and two grounds should be connected.

Receiving Response from Serial Device in Arduino MEGA

I am a newbie with Arduino Mega 2560 .I have been trying to connect the Arduino and SIM900A module(GSM/GPRS module).I have connected the USB to my PC(Serial instance) and pins 18(Tx) and 19(Rx) to Rx and Tx in the GSM/GPRS module respectively and the GND pin(GSM/GPRS) module's is connected to GND,one near pin 13 in the Arduino.
Power connection:-
I am powering using 12V supplies for each of the boards.
The below is my code.
void setup()
{
Serial.begin(9600);
Serial1.begin(9600);
delay(1000);
Serial.print("Initial Setup !!");
delay(5000);
}
void loop()
{
if(Serial.available())
{
char a=Serial.read();
Serial1.print(a);
//Serial.print(a);
}
if(Serial1.available())
{
char B=Serial1.read();
Serial.print(B);
//Serial.print(a);
}
}
I am able to get the initial response in the "Serial Monitor" like (+CFUN:1,+CPIN:READY)(Once I open the Serial monitor I used to press the reset in the GSM/GPRSmodule).
But when I type some AT commands in the Serial Monitor,I am not able to get the response like "OK" from the GPRS/GSM Module.
Please let me know what I should be doing for getting the responses back from GSM/GPRS module.
Have you tried cutting out the Arduino, for just a moment? Get yourself a UART and wire up TX/RX to the GMS respectively. Then plug it into your PC and launch terminal (Tera Term, etc.).
Try issuing some AT commands and make sure you're getting correct responses/echos. You may also want to try a tool called QNavigator (free download).

Arduino Serial1

I'm using an Arduino Micro. When I use "Serial.write", etc. with the Arduino's IDE serial monitor, everything is working fine.
However, when I try to read or send data via "Serial1", I get nothing. "Serial1" is supposed to use 0 and 1, RX and TX, respectively.
Do I need to connect these pins through a USB converter or are they connected on the boards USB converter?
Here is the code:
Void setup(){ Serial1.begin(4800); }
Void loop(){ Serial1.prrint('X'); }
The only serial port connected to the USB that the serial monitor can read from is Serial.
Serial1, Serial2, and Serial3 are all logic level serial and will not show up on the Arduino serial monitor.
If you want to see the output from these on your computer, it will require extra hardware.
Serial is the only serial port connected to USB. So serial monitor can access only that port. If you need Serial1 or Serial2 to be accessed by serial monitor, then you should use 'USB to TTL Serial Cable' and connect this to RX and TX pins of the arduino's Serial1 port.
Please visit link for USB to TTL Serial Cable, enter link description here
"Serial1" in Arduino Micro is physically connected to the TX and RX pins (TTL), and "Serial" is just a "virtual port" which you can read using Arduino IDE's Serial Monitor. That’s why Arduino Micro is a little different from another, such as Arduino Nano or Arduino Pro Mini.
If you use Serial and Serial1, you can approach this advantage, upload code using USB and make a connection through Bluetooth (using HC06 connected to physical pins) without disconnecting the USB cable and powered both devices (Arduino Micro and Bluetooth).
If you can't upload code to your Arduino Micro sometimes, press the Arduino Micro's reset button, release it, and press the upload button in Arduino IDE's.
"virtual port" sometimes needs to restart and connect using USB.
This is from Arduino's documentation website:
...Serial: 0 (RX) and 1 (TX). Used to receive (RX) and transmit (TX) TTL serial data using the ATmega32U4 hardware serial capability. Note that on the Micro, the Serial class refers to USB (CDC) communication; for TTL serial on pins 0 and 1, use the Serial1 class.
You said it right. Serial1 is the RX and TX pin, while Serial is a virtual interface between the computer and Arduino. I have used the TX and RX pins for a wireless module, and if you need to use Serial1, it would have to occupy pins 0 and 1, and switch from DLINE to UART on your board.
Make sure you go to tool/board: and select Arduino Mega (or other board with multiply serial ports) or it won't work, because the Uno only has one Serial communication port (aka The TX and RX pins on pins on 1 and 0)! Write 1,2 or 3 depending on what TX and RX pins you are using on the Board. The mega has a whole set of extra pins for Serial 1,2 and 3, for example:
Arduino Uno (etc):
Serial.begin(9600)
Serial.write("testing")
Arduino Mega:
Serial1.begin(9600) // <{or what even baud rate you should use}
Serial1.write("testing")
or
Serial2.begin(9600)
Serial2.write("testing")
or
Serial3.begin(9600)
Serial3.write("testing")
Serial1 is the wrong class for pin 0 and pin 1. You should use Serial class.
Do I need to connect these pins through a USB converter or are they connected on the boards USB converter?
It makes no difference for Serial class.
Use:
Void setup()
{
Serial.begin(4800); // 9600....
}
void loop()
{
if(Serial.available())
{
int a = Serial.read();
Serial.Writeln(a);
}
else
{
Serial.Writeln("Error");
}
}
Open the serial monitor with the icon placed in right corner of Arduino IDE. It will be available if you connect the Arduino with PC.
When you open the Arduino IDE, write this code block:
Void setup()
{
Serial.begin(9600);
}
void loop()
{
if(Serial.available())
{
char get = Serial.read();
Serial.Write(get);
}
}
Select the Arduino 9600 port and write something. If you get your written text, your Arduino is ready for serial communication.
You have to define Serial1 by using SoftwareSerial class from SoftwareSerial library, google and download the library:
The code should be something like this:
// Example
SoftwareSerial Serial1(9, 10); // RX and TX, respectively
Void setup() {
Serial1.begin(4800); // Here is your New serial
Serial.begin(9600); // This is where Arduino is connected to your PC
}
Void loop() {
// Code goes Here
}

Resources