Implementing a Blynk client (library)
This documentation is for the LEGACY version of Blynk platform which is no longer supported and will be shut down.
You can sign up for the current version of Blynk platform here.
The new mobile apps can be downloaded from App Store and Google Play.
The actual Blynk documentation is here.
We provide a reference C++/Arduino implementation of the library. It is very extensible and modular, just look at the list of supported hardware. Adding new connection types and Arduino-compatible boards is easy.
But some devices are programmed in other languages and environments, like:
Vendor-specific SDK and IDE
JavaScript, Node.JS, Espruino
Python, MicroPython
NodeMCU, eLua
This document hints how to write a custom library.
Blynk library main functions
Provide easy-to use API
Virtual pin handlers registration
Provide comfortable wrappers for some widgets
Manage connection
Should support different connection type/hardware, if applicable
Serialize/deserialize Blynk protocol
Should be portable across similar devices (or same technology/programming language), if possible
Should detect and notify the user about troubles where possible (especially Flood)
Handle direct pin operations [optional]
Adding new HW board to the Blynk mobile app
Different boards can be added by creating JSON board description file - look at the examples here. You can send us your own board description files for review and App integration.
There may be a problem that you want to start testing your implementation, but your board is not listed int the Blynk App. We have a "Generic Board" specially for such purposes. Or you can just select UNO board and check how it works using just virtual pins. Most digital pins should also work. Analog IO/PWM will not work in general, until we add your board to the App.
Blynk protocol
Blynk transfers binary messages with the following structure:
Command Message Id Length/Status Body 1 byte 2 bytes 2 bytes Variable
Message Id and Length are big endian. Body has a command-specific format.
Command and Status definitions: BlynkProtocolDefs.h
Another protocol description can be found here.
Typical Blynk library knows how to send(S) and process(P):
HARDWARE/BRIDGE command body
The body of these commands are encoded as a sequence of strings, separated by '\0' (Null character). Please note that the last value may be not Null-terminated.In the following command examples '\0' chars are replaced with spaces.
Pin mode
PinMode command is received by library after connection, or when a mobile application starts.
Mode:
in - INPUT
out - OUTPUT
pu - INPUT_PULLUP
pd - INPUT_PULLDOWN
Digital pin operations
Digital write:
Digital read:
Analog pin operations
Virtual pin operations
Developer notes
Values in HW commands are plain text.
In response to dr/ar command, library should send dw/aw command on the same pin and with the same message id.
These situations should cause a connection drop or reconnection attempt: Message with ID=0 is received, Message with unknown type is received
Example implementations
Use these to play with the protocol and understand the basics:
Adding network interface
4 entities should be created to add a new network interface to Arduino library:
1 - Select connection interface that will be used for Blynk operation. This should be something like http://www.arduino.cc/en/Tutorial/WebClient
Based on the API of the connection, create the Transport. Some examples may be found in the Adapters folder:
BlynkTransportSerial
BlynkTransportCC3000
BlynkArduinoClient - should be reused, if possible
2 - Create Blynk representative class, which contains connection-specific helper functions (like begin).Examples:
BlynkEthernet
BlynkStream
BlynkCC3000
BlynkWildFire
BlynkYun
3 - Create BlynkSimple*
header for your connection. This constructs main Blynk instance, so the user (mostly) doesn't need to get into such details.Examples:
BlynkSimpleEthernet.h
BlynkSimpleCC3000.h
BlynkSimpleWifi.h
BlynkSimpleUIPEthernet.h
4 - Create a simple example for your platform ;)
Last updated