# Good practice for sending data from Arduino to Processing

**URL:** <https://discourse.processing.org/t/good-practice-for-sending-data-from-arduino-to-processing/6339>\
**Category:** Electronics (Arduino, etc.)\
**Created:** [December 5, 2018, 6:48pm UTC](https://discourse.processing.org/t/good-practice-for-sending-data-from-arduino-to-processing/6339 "2018-12-05T18:48:05Z")\
**Posts on this page:** 1\
**Showing post:** 5

<div class="post-metadata">

**Author:** ![kll](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/kll/32/964_2.png) [@kll](https://discourse.processing.org/u/kll)\
**Post date:** [December 6, 2018, 4:51pm UTC](https://discourse.processing.org/t/good-practice-for-sending-data-from-arduino-to-processing/6339/5 "2018-12-06T16:51:05Z")

</div>

update

> **example v02**
>
> ```auto
> // https://discourse.processing.org/t/good-practice-for-sending-data-from-arduino-to-processing/6339/2
> 
> // on arduino make and send a JSON String,
> 
> // in processing catch the line and use
> // https://processing.org/reference/parseJSONObject_.html
> // https://processing.org/reference/JSONObject.html
> 
> // add to Array and save to file:
> // https://processing.org/reference/saveJSONArray_.html
> // _________________________________________________________
> // test on WIN7 32bit
> // and processing IDE 3.4
> 
> import processing.serial.*;
> Serial myPort; // Create object from Serial class
> 
> String inString = "{ \"UNO_1\" : { \"A0\" : 1000 , \"A1\" : 1001, \"A2\" : 1002, \"A3\" : 1003, \"A4\" : 1004, \"A5\" : 1005 } }";
> String outfilename = "data/arduinocatch.json";
> // String outfilename = "/run/shm/arduinocatch.json"; // for RPI
> // ______
> JSONArray allArduinoLines = new JSONArray();
> JSONObject arduinoLine = new JSONObject();
> JSONObject values = new JSONObject(); // to catch just the value list ( of the inner { } ) 
> String remoteIOdevice = "UNO_1";
> String[] channels = {"A0","A1","A2","A3","A4","A5"};
> int bdrate = 115200;
> 
> // _________________________________________________________
> void setup() {
> size(200,200);
> get_line(); // init
> printArray(Serial.list());
> String portName = Serial.list()[1]; // here it was "COM3"
> myPort = new Serial(this, portName, bdrate);
> }
> 
> // _________________________________________________________
> void get_line() {
> arduinoLine = parseJSONObject(inString);
> println(" new inString: "+arduinoLine);
> allArduinoLines.append(arduinoLine);
> }
> 
> // _________________________________________________________
> void to_file() {
> saveJSONArray(allArduinoLines, outfilename);
> }
> 
> // _________________________________________________________
> void draw() {
> background(200,200,0);
> check_serial();
> show_line();
> }
> 
> void check_serial() {
> while (myPort.available() > 0) {
> inString = myPort.readString();
> println("serial event: "+inString);
> if (inString != null) {
> get_line();
> to_file();
> }
> }
> }
> 
> // _________________________________________________________
> void show_line() { // take JSON object "arduinoLine" appart and show as text
> int dpos=20, ypos = dpos; // canvas text layout
> values = arduinoLine.getJSONObject(remoteIOdevice);
> //println(" data from: "+remoteIOdevice+" \n"+values);
> fill(0);
> text(remoteIOdevice , dpos, ypos); ypos += dpos;
> for (int i = 0;i<6;i++) text(channels[i]+": "+values.getInt(channels[i]), 2*dpos, ypos +i*dpos);
> }
> 
> // _________________________________________________________
> /*
> first time started: dir and file is created
> /data/arduinocatch.json
> content:
> [{"UNO_1": {
> "A1": 1001,
> "A2": 1002,
> "A3": 1003,
> "A0": 1000
> }}]
> 
> */
> 
> /* Arduino code used here:
> 
> // test on Arduino Leonardo USB to win7 PC found "COM3"
> // to send a JSON like full text record
> String JSON;
> int channels[6];
> 
> void setup() {
> Serial.begin(115200);
> while (!Serial) { ; } // wait for serial port to connect. Needed for LEONARDO..
> }
> 
> void get_Ain() {
> for (int i=0;i<6;i++) channels[i] = analogRead(i);
> }
> 
> void makeJSON() {
> JSON = "{ \"UNO_1\" : { ";
> for (int i=0;i<6;i++) {
> JSON += " \"A";
> JSON += i;
> JSON += "\" : ";
> JSON += channels[i];
> if ( i < 5 )JSON += " , ";  
> }
> JSON += " } } ";
> }
> 
> void loop() {
> get_Ain();
> makeJSON();
> Serial.println(JSON); // to processing
> delay(1000);
> }
> 
> */
> 
> ```

@matheplica what hardware you have to test this?  
update: i checked on Raspberry Pi 3B+  
and there it was on

> /dev/ttyACM0 (Arduino Leonardo )

and i recommend to change data storage from uSDcard to (temporary) RAM DISK  
( because write every second to card wears it out in?? )

> String outfilename = “/run/shm/arduinocatch.json”; // for RPI

//\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

@rodrigogamboa i did notice in your arduino code

> delay(1); // delay in between reads for stability

pls, that is one millisecond ( not one second )  
so possibly you are up to high speed sampling,  
then i would recommend a total different way.

- -a- you sample to array as fast as possible  
( add there is special speedy code if you sample one channel only )
- -b- in a batch type communication you send that whole array to processing
- -c- you build a oscilloscope like view

i play this on processing, python or webserver

> 35kHz on **one channel** for Arduino and 520kHz for MAX32.

check out my BLOG and search for PoorManScope

 ![](https://yyz2.discourse-cdn.com/flex036/uploads/processingfoundation1/original/2X/d/d0d5e58faafde742e9fd7a94540ae1996bdeef2d.jpeg)

---

_[View the full topic](https://discourse.processing.org/t/good-practice-for-sending-data-from-arduino-to-processing/6339)._
