Skip to content

Migrating from Sming v3.8.x to v4

Mike edited this page Jul 8, 2019 · 7 revisions

Summary

With the new Sming version 3.9.0 there will be a lot of backwards incompatible changes. This page is provided to help with migrating your applications.

Header files

The folder structure has been revised to provide support for additional architectures, such as the ESP32.

The Sming/Arch directory should never be accessed directly: it contains specific files for the target architecture, and may provide different header file versions to the main ones. Instead, consider these directories to be your 'root' include directories:

Sming
Sming/Components
Sming/Core
Sming/Wiring

Examples of #include statements:

Old-style Recommended
"SmingCore/SmingCore.h" <SmingCore.h>
"SmingCore/Network/SmtpClient.h" <Network/SmtpClient.h>
"SmingCore/Data/Stream/FlashMemoryStream.h" <Data/Stream/FlashMemoryStream.h>
"Wiring/WString.h" <WString.h>
"SmingCore/Platform/Station.h" <Platform/Station.h>

Changed Headers

If you use some of the includes below directly in your application make sure to apply the following changes:

Description Old name New name
uart driver "espinc/uart.h" <driver/uart.h>
flesh memory "flashmem.h" <esp_spi_flash.h>
C compatible types <espinc/c_types_compatible.h> <c_types.h>.

user_include.h

This file is generally #included ahead of everything else so that common architecture-specific definitions are available. Unless you've made changes to the file, it is not required and you should delete it: Sming provides a default which will be used.

If you have made customisations, please amend the file as follows:

#pragma once
#include_next <user_config.h>

<< User Customisations here >>

Application Makefile

Instead of Makefile-user.mk a project should provide a component.mk. To convert to the new style:

  1. Copy Makefile and component.mk from the Basic_Blink sample project
  2. Copy any customisations from Makefile-user.mk into component.mk file. (Or, rename Makefile-user.mk to component.mk then edit it.)
  3. Delete Makefile-user.mk
  4. If the project uses any Arduino libraries, set the ARDUINO_LIBRARIES variable

You can find more detailed information about component.mk in Sming/building.md.

JSON

ArduinoJson has been updated to Version 6 from version 5. See the Version 6 Migration Guide for details.

Note some methods of JsonVariant have been removed, replacements are:

asString() -> as<char*>() or as<const char*>. Note that as<String> produces a serialized version, so you'll get "null" instead of an empty/invalid result String.

asArray() -> as<JsonArray>()

asObject() -> as<JsonObject>()

There are also some useful helper functions available in the Json namespace. See Libraries/ArduinoJson6/include/ArduinoJson.h.

ArduinoJson is now an optional Component, so you need to make a couple of changes to use it:

  • Add ARDUINO_LIBRARIES=ArduinoJson6 to the project's component.mk file. To support migration of existing projects, you can elect to continue using version 5 by specifying ArduinoJson5 instead.
  • Add #include <JsonObjectStream.h> to your source code. If you're not using the stream class, add #include <ArduinoJson.h> instead.