Data requirement

I already have a product that sends its operational data to a remote display via CANbus, but customers want to be able to access the display remotely, and your system was recommended.
If I were to make a small board with a CAN transceiver, processor and GSM modem such as SIM800C, what data do I have to send to the modem? What format should it be in?
(Presume this data must be in your docs somewhere, but couldn’t find it)

Most people use one of the Blynk libraries to establish an Always On connection to the Blynk server via WiFi, Ethernet or GSM.
The most popular and most highly developed library for this is written for C++

The Always On connection means constant handshake data being transferred across the connection, which may be an issue for GSM.
The big advantage of this approach is that the device knows instantly if a control widget on the mobile UI has changed state. This might be a switch or slider for example which is used to initiate a change on the device.
It sounds like you don’t really need this two-way communication, simply one-way to display the data you want to push to the Blynk server then out to the mobile UI.

As a result, it may be best to take the other approach, which is to use the Blynk REST API to push data to the Blynk server. This is documented here:

The advantage of this approach is that you don’t need an Always On connection, so you potentially save on mobile data. The disadvantage is that the device will appear as offline in Blynk, as it doesn’t have an Always On connection established with the server.


Thank you.
My application is emergency lighting, where things change at a glacial pace. A battery can spend a year on float charge before anything significant happens. So it really doesn’t need an always-on connection.
I read the page on “update datastream value” which was helpful, but the commands look like something that goes in a web browser. I seem to think that my microcontroller should be a sending whole load of AT commands to the GSM modem before that happens.

That would normally be handled by using the TinyGSM library rather than doing it at an AT command level.

Do you want to share some details about make/model etc, and what language you’re using to program it?


It’s a Renesas RA4M1 (which has an ARM Cortex-M4 core) and my software is written in ARM assembler.

Does Blynk have a proper technical support system, or does it rely on users to do their job free-of-charge?

It depends on the type of subscription you have, as outlined here:

Having said that, the Blynk developers and staff do also contribute to the forum, but their primary focus is obviously to support business clients.

From what you’ve said, the REST API is the solution for you, unless you want to give the “unofficial” (i.e unsupported) Blynk Arm Mbed library a try,

It doesn’t look like it’s been updated from Blynk Legacy though, so somewhere in the library files the hard-coded url of will need to be changed to blynk-cloud.


Last time I designed anything that connected via a modem, it was dial-up at 9600 baud. I am firmly in the “embedded programmer” field, I’m not an app developer.
You seem to have some new terminology. Have I got this right . . . . . .?

  1. The data is associated with virtual pins. These can be given names, and be associated with different data formats.
  2. in the QuickStart example, the virtual pin is called “button”.
  3. Each device has a “token” which identifies it.
  4. REST is an acronym.
  5. I send the “update data stream value” command “” etc with my device’s token, the pin I am updating, and its new value.
    And that’s about it?
    I found some instructions on establishing the http link for a SIM800C
    Is that what I need? With the http command where it says “url”?
  1. Blynk IoT uses datastreams. These can be Virtual, Digital Enumerable etc, but stick with Virtual.
    They are defined in the web console and you can give them names, aliases etc and define their data type, min/max values, default value etc.
    When you’re using the API you’d normally use the virtual pin number (v1, v2 etc).

  2. there are 4 datastreams in the QuickStart example V0 to V3…

  3. Yes, the Auth token is the unique identifier/secret key for that device, and sufficiently long and random to ensure that it isn’t guessed by anyone else.

  4. What is a REST API?

If you read the “Troubleshooting” section of the Blynk API documentation you’ll see that it’s best to include the subdomain which identifies the regional server associated with the project. This is so that you don’t get any DNS resolution issues.

The syntax is a little more complex, you need to specify whether you’re getting or updating data, but the documentation has detailed examples if you drill-down.

Not sure. I’d normally use a library that handles all of this in the background, such as the TinyGSM library for C++, so don’t get involved in the nitty-gritty of AT commands.


Thanks for your help. I’ll get some hardware together and see what I can make it do.

All I got from the TinyGSM library was
“BlynkSimpleTinyGSM.h no such file or directory”
“modem.init(); modem not declared”