TOP Contributors

  1. MIKROE (2784 codes)
  2. Alcides Ramos (392 codes)
  3. Shawon Shahryiar (307 codes)
  4. jm_palomino (123 codes)
  5. Bugz Bensce (97 codes)
  6. S P (73 codes)
  7. dany (71 codes)
  8. MikroBUS.NET Team (35 codes)
  9. NART SCHINACKOW (34 codes)
  10. Armstrong Subero (27 codes)

Most Downloaded

  1. Timer Calculator (140535 times)
  2. FAT32 Library (73023 times)
  3. Network Ethernet Library (58026 times)
  4. USB Device Library (48212 times)
  5. Network WiFi Library (43821 times)
  6. FT800 Library (43293 times)
  7. GSM click (30354 times)
  8. mikroSDK (28984 times)
  9. PID Library (27115 times)
  10. microSD click (26717 times)
Libstock prefers package manager

Package Manager

We strongly encourage users to use Package manager for sharing their code on Libstock website, because it boosts your efficiency and leaves the end user with no room for error. [more info]

< Back
Library

MQTTClient

Rating:

0

Author: VCC

Last Updated: 2024-05-22

Package Version: 1.1.0.0

Category: Communication

Downloaded: 120 times

Not followed.

License: MIT license  

MQTT Client library.

No Abuse Reported

Do you want to subscribe in order to receive notifications regarding "MQTTClient" changes.

Do you want to unsubscribe in order to stop receiving notifications regarding "MQTTClient" changes.

Do you want to report abuse regarding "MQTTClient".

  • Information
  • Comments (1)

Library Blog

Features:
- Written according to the specification of MQTT5 (from 2019).
- Supports multiple clients, i.e. connections to multiple brokers at the same time (requires more testing).
- Supports QoS0, QoS1 and QoS2.
- The UserProperty field (see spec), from all packet types, is enabled by a compiler directive, to save some space.
- Single event (for callback) of multiple error codes.
- Compiled and tested both for Desktop (FreePascal) and on MCU (PIC32).
- Because MQTT works with multiple pieces of data, of many sizes, the DynArrays library (which is a dependency) allows "rounded" allocation, which reduces memory fragmentation.
  Stability tests proved this feature to be a requirement, no matter how many fragments the memory manager supports.

What is not tested or implemented:
- The use of Topic Aliases.
- Responding with Disconnect to various error conditions (e.g. duplicated messsages).
- Responding with various error codes to server (e.g. "Protocol Error", "Payload format invalid", "QoS not supported", "Topic Alias invalid"  etc).
- Properly reacting to various server error messages, to free resources.
- Caching topic names for later correlation (e.g. between a subscription and a received message).
- Auth, other than plain username+password on connect.
- Retain.
- Will.
- Reconnecting.
- Clean/Reused sessions.
- The use of timeouts and expiration intervals (e.g. Message Expiry Interval).
- Compatibility with clients or servers of older protocol versions (e.g. v3.1.1).
- Handling DISCONNECT packet, which should automatically free some resources.
- Using SingleOutputBuffer. This is a feature, which automatically concatenates output packets into a single array of bytes.
- Using the library in a real life scenario, where the MCU stays connected for a long time.

Limitations:
- Heavily use of inversion of control. That requires using additional FIFOs between MQTT library and Ethernet library.
  This may complicate user code, because of many required callbacks, where MQTT parameters are configured.
  Some of the internal library functions are exposed, so that users may replace existing logic with theirs, thus bypassing callbacks.
- Havily use of dynamic memory allocation.
- No safety mechanisms (so far) for dealing with too large packets. In case of OutOfMemory errors, the memory manager will have to be reset.
- Although clients can be created and destroyed dynamically, users have to make sure their instances are not in use while destroyed.
  The same limitation applies to all clients which have a greater index in the array which holds client instances, because they will be reindexed.
- The development priority has been to have a working library over an efficient one. Some areas require many optimizations.
- Very difficult to predict the required amount of memory for a given application. Because of this, only MCUs with more RAM are suitable.

Dependencies:
- DynArrays library (which depends on MemManager) for dynamic memory allocation.

Misc:
- The provided example uses "mikroMedia for PIC32MX7" board and logs MQTT activity through UART (with FT232R).
  Because of that, it requires "mikroMedia for PIC32MX7 shield".
- This example does not show how the MCU application works when it subscribes to a topic.
- No documentation available at this time.

 

ALSO FROM THIS AUTHOR

DynTFTCodeGen

0

DynTFTCodeGen is a tool, used for designing and generating initialization code and event handlers for DynTFT projects. It features a drawing board, an object inspector, a component palette and various dialog boxes for application and project level settings.

[Learn More]

DynArrays

0

Dynamic arrays of Byte, Word, DWord and Pointer. Also 2D arrays of Byte and Word, and 3D array of Byte. Can be compiled on desktop (tested with FreePascal) and MCU (for dsPIC and PIC32).

[Learn More]

All Tools

5

All Tools is an application, which allows more than 10 user tools to be started from a mikro IDE. It is a menu-based design, as opposed to a list of buttons, thus taking only one button space on the IDE. For each installed tool, two more applications can be executed, one before the tool, and the other, after the tool.

[Learn More]