Arduino bluetooth communication with phone with more received data

Hello everyone. I was wondering how I could receive more than one value from my arduino sensors to my phone. Basically, how can my phone recognize different variables? How can I set it up on both arduino and mit?

Arduino Sketch Example

ClassicBt_Arduino_ToAppMultiVal.txt (2.1 KB) (rename to .ino file)

You can send a string, like this:

//ArduinoToAppMultiVal.ino  Chris Ward 13/04/2021 23:05:14

DHT_Unified dht(DHTPIN, DHTTYPE);

//vars
unsigned long lgUpdateTime;
unsigned int igID = 1;
float fgTemperature;
float fgHumidity;

void setup()
{
         // Initialize device.
            dht.begin();
         Serial.begin(9600);
         lgUpdateTime = millis();
}

void loop()
{
	     if(millis() - lgUpdateTime > 5000) //Loop approx every 5 seconds
         {
                  lgUpdateTime = millis();
                  
                  //Collect sensor data

                  //Temperature
                  sensors_event_t event;

                  dht.temperature().getEvent(&event);

                  if (isnan(event.temperature))
                  {
                         fgTemperature = 99999.0;
                  }
                  else 
                  {
                         fgTemperature = event.temperature;
                  }

                  //Humidity
                  dht.humidity().getEvent(&event);

                  if (isnan(event.relative_humidity))
                  {
                         fgHumidity = 99999.0;
                  }
                  else
                  {
                         fgHumidity = event.relative_humidity;
                  }
                  
                  if (Serial.connected())
                  {
                              //To App via Bluetooth

                              if ((fgTemperature != 99999.0) && (!fgHumidity != 99999.0))
                              {
                                 Serial.print(fgTemperature,2); 
                                 Serial.print("|");
                                 Serial.print(fgHumidity,2); 
                                 Serial.print("|");
                                 Serial.print(igID);   //process ID
                                 Serial.println();     //This tells App "End of Data"
                                                       //= Ascii LineFeed Char Num 10
                              }
                  }
         }
}

Note that I have used a pipe "|" char as the value separator for App Inventor to split the string into a list.

App Inventor Project Example (Matching Above Sketch)

BT_Basic_Setup_ReceiveMulti.aia (10.2 KB)

Hello. I'm having an issue with receiving multiple values. I will send you the code and the block, I circled the part where I've had the issue (everything else works just fine)

momo.txt (1.2 KB)

Did you enter 10 in DelimiterByte?

tes

Yes. I had put it in the block only but now also from the designer. However, those values still don't appear. Or better, take a look

Change the "receive bytes" block to "receive text"blocks - 2021-04-14T185404.894

1 Like

This technique only works when you do BlueTooth ReceiveText.

It does not work for ReceiveUnsignedBytes.

1 Like

Thank you so much! It works now. One question: why do we put that -1 at number of bytes? What's it for?

Thank you!

Right-click the "ReceiveText" block and select "Help" from the menu. There is a description for the negative value.