I've recently gotten my hands on an Arduino (or rather a Genuino, but the overall architecture should be the same) UNO. I'm now using that Arduino to test how data is transmitted from a USB to Serial Connector to the Arduino.
I've already verified that data transmission from Arduino to the PC is possible, by using hTerm and PySerial. However, whenever I send data from Pyserial or hTerm, it doesn't show up in the Arduino serial terminal. Also, I'm using SoftwareSerial to set up a secondary serial terminal to see what the Arduino receives. (I'm using the standard serial port to send data to the terminal, and the SoftwareSerial Port to connect to the USB to Serial Connector.)
Here's my code so far:
Python side:
import serial
import time
import sys
import struct
ser = serial.Serial('COM3', 9600, timeout=0)
time.sleep(10)
while 1:
print(ser.write(struct.pack('>B', 0)))
time.sleep(2)
print(1)
sys.stdout.flush()
The Arduino side looks like this, and is essentially the default example: https://www.arduino.cc/en/Tutorial/SoftwareSerialExample
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
void setup() {
// put your setup code here, to run once:
if (Serial) {
Serial.end();
}
Serial.begin(9600);
while (!Serial) {
;
}
Serial.println("Godnight moon!");
mySerial.begin(9600);
mySerial.println("Hello, world?");
}
void loop() {
// put your main code here, to run repeatedly:
mySerial.listen();
if (mySerial.available() > 0) {
Serial.println("Hello User");
Serial.println(mySerial.read());
}
}
The Terminal never prints "Hello User". Also, no other signals are being printed. By removing the if-condition, I get a whole lot of "Hello User" and "-1" in the Arduino IDE serial monitor.
Concerning my setup:
I've got an USB to Serial converter, which is connected as "COM3". On the other side, I have an Arduino UNO which is connected via USB to the same computer. The TX pin of the converter is connected to the RX pin of the Arduino and vice versa. Also, Ground is connected to Ground. Furthermore, I use Jupyter/IPython notebook to run my Python script, and the default Arduino IDE to compile programs for my Arduino. In the case there I received data from the Arduino, I used the script specified in the URL provided, which is very similar to the one I'm already showing here. Also, ser.write()
is replaced by ser.read(1)
, so that it reads one byte at a time. My system is Windows 7 (64 Bit).
Edit: Here is an established connection between hTerm (a serial terminal) and the Python script while using com0com as a port emulator.