Introduction: Interfacing Bolt With Arduino : Bolt UART
Introduction
This instructable is made for Bolt users who wish to interface the Bolt hardware unit with Arduino Uno or simply want to experiment with the Bolt UART.
Prerequisites
Access to Bolt IoT workshop and its successful completion is recommended as a few steps are omitted in the instructable assuming User has prior knowledge of working with basic Bolt hardware with respect to Control and Monitoring GPIO pins of Bolts and testing Basic Applications like LED glow etc on Bolt.
Bolt UART
The Bolt has a single UART interface and supports the following baud rates for serial communication.
1) 2400
2) 4800
3) 9600
4) 19200
To initiate the UART with required Baud rate you will need to call the following URL from your preferred Browser.
http://ip-address-of-bolt/serialBegin?baud=n
Where ip-address-of-bolt is the IP of the Bolt Unit on your local network and baud=n where "n" takes a value from 1 to 4 and it represents the respective baud rates as seen above.
For example if IP address of Bolt is 192.168.1.5 and you need to set 9600 baud rate the URL becomes:
http://192.168.1.5/serialBegin?baud=2
We will be using the same baud rate for this instructable.
Step 1: Send Values Over TX (Transmit Line) of Bolt UART
Once you have initialized the Baud rate on Bolt , you can now begin to send and receive date over the Bolt UART.
Serial Write Function (Transmit data)
To transmit data over the Serial port of Bolt you need to type the call the following URL from your browser:
http://ip-address-of-bolt/serialWrite?data=string-to-transmit
For example if we wish to transmit the String "hello":
http://192.168.1.5/serialWrite?data=hello
This command if executed correctly return a JSON object with key "success" set to "1" and key "value" set to "serial write successful"
Step 2: Receiving Data Over Rx (Receive Pin)
This step will allow you to read contents of the Receive buffer of the Bolt UART
Serial Read Function (Receive data)
To receive data over the Serial port of Bolt you need to type the call the following URL from your browser:
http://ip-address-of-bolt/serialRead
Example:
http://ip-address-of-bolt/serialRead
The command if executed correctly return a JSON object with key "success" set to "1" and key "value" set to "contents of Rx buffer"
If buffer is empty the reply for key "value" is set to "Receive buffer empty"
Serial Read "Till" (Receive data till required character)
To receive data over the Serial port of Bolt you need to type the call the following URL from your browser:
http://ip-address-of-bolt/serialRead?till=decimal-code-for-ascii-char
Example: If you wish to read a the input buffer till you come across a Line Feed character or '\n' whose decimal code in the ASCII table is 10
http://192.168.1.5/serialRead?till=10
Case1: The command if executed correctly return a JSON object with key "success" set to "1" and key "value" set to "contents till last character before '\n' "
Case2: If '\n' isn't encountered in the buffer while reading all its contents will be held in key "value"
Case3: If buffer is empty the reply for key "value" is set to "Receive buffer empty"
Note: If the buffer isn't empty after '\n', then the next read command will contain the remaining contents of the buffer after '\n' but not including '\n'
To discard any extra / unnecessary values in the Receive buffer we have to flush it as shown in the Next Step.
Step 3: Flush Receive Buffer
To empty the contents of the Rx buffer of the Bolt UART you need to call the following URL:
http://ip-address-of-bolt/flushReceiver
Example:
http://192.168.1.5/flushReceiver
This will return a JSON object with "success" key set to "1" and "value" set to "Receive Buffer Flushed"
This command is particularly useful when you feel that the buffer may contain some extra or garbage data that needs to be cleared before acquiring relative data.
Step 4: Serial Read Command Response
An added functionality to Bolt is its ability to send a command to a system over the UART and if the response is received within 200ms it can fetch the same using a single command.
Serial Write and Read Function (serialWR)
To read response of a command you need to call the following URL from your Browser:
http://ip-address-of-bolt/serialWR?data=command&till=decimal-code-for-ascii-char
Example:
http://192.168.1.5/serialWR?data=hello&till=10
The reply for this command will be same as that of Step 2, only difference being that if the command response is empty then the key "value" will be an empty string => "" .
Note:Just as serialRead "till" is an optional parameter in the URL
Step 5: Interfacing Bolt With Arduino
In this step we will make the necessary hardware connections to setup serial communication between Arduino Deumilanove and Bolt.
This is pretty straight forward and you will need three male-to-male jumper cables for this step
1) Connect Tx pin of Bolt to Rx pin of Arduino .
2) Connect Rx pin of Bolt to Tx pin of Arduino .
and finally
3) Connect Gnd(ground) pin of Bolt to Gnd(ground) pin of Arduino .
Next you can upload the following code on Arduno to test Serial communications
void setup() {<br> // put your setup code here, to run once: Serial.begin(9600); //Begin Serial at 9600 Serial.setTimeout(50); //Timeout serial if readString is unavailable } void loop() { // put your main code here, to run repeatedly: <br> String inString = ""; <br> if (Serial.available() > 0) { // get incoming String inString = Serial.readString(); //Read input string from bolt Serial.print(inString); //Send same string back to bolt } }
This is a Simple echo code which will reply back whatever the Arduino receive back to the Bolt.
Once you burn this code from on your Arduino call the following URL in your browser to test the system:
*assuming ip address of Bolt is 192.168.1.5
http://192.168.1.5/serialWR?data=hello
and you should get a JSON response with "success" key set to "1" and "value" key set to "hello".
Step 6: Test Screenshots.
After you finish interfacing we shall now check the responses and different commands learned previously.
In the First screenshot we only sent a String to Arduino saying "say hi to arduino"
The corresponding URL call for the Bolt being "http://192.168.2.16/serialWrite?data=say hi to arduino"
Next we read the response from Arduino which according to the code we uploaded in the previous step is just the same String we sent to it. The URL to do the same is "http://192.168.2.16/serialRead"
After that we send a string 12345 using the URL call "http://192.168.2.16/serialWrite?data=12345"
But now instead of reading the entire reply lets say we need to read the buffer only till we encounter the character "5" whose ASCII code in decimal is 53. The URL to do this becomes "http://192.168.2.16/serialRead?till=53"
Hence the response for the key "value" will be "1234" here 5 is omitted.
The next screenshot we test the serialWR command where we get immediately the echo to the data we write.The URL used here is "http://192.168.2.16/serialWR?data=12345"
After this is an example of Using serialWR till we encounter the letter "l" whose ASCII code in decimal is 108. The URL used here is "http://192.168.2.16/serialWrite?data=12345&till=108"
Hence the response for the key "value" will be "he" here l is omitted.
Now if we do a simple serialRead again using the URL call "http://192.168.2.16/serialRead" the response for the key "value" will be "lo" that is the remaining string after the first occurrence of the character "l".
4 Comments
1 year ago
Hello Anyone can help me in saving data from Arduino to Firebase Cloud using Bolt IoT device
Please Help Me!!
3 years ago
how can I get the ip address of bolt kit ?
please help me as soon as possible
6 years ago
{"success":"1","value":"serialWrite successful"}
above statment also return when i remove my arduino from power supply
How can it possible?
Reply 4 years ago
When you connect the 5V and ground pins of the bolt to the Arduino you do not need an extra power supply for the Arduino, as the bolt pins will now provide the power.