Unleash your Nextion

One thing Nextion and the people representing them are really good at is telling you how amazing their product is. While many people here have more … differentiated opinions about that they are in fact making sort of an understatement. The Nextion plattform actually has some very interesting capabilities they don’t tell you about. Among those things: drawing QR codes at runtime whereever you want - even from your MCU over serial, an alpha channel (transparency) for drawings and the ability to read the current CPU load percentage. Why Nextion hides this from you? I wondered about that, too. Details below.

The origin of this discovery is the high interest in developping a custom firmware for the NSPanel. While the stock firmware doesn’t look bad, many prefer a solution compatible to popular home automation systems like Tasmota. The" good" news is that the NSPanel at its heart is a Nextion Discovery screen, so creating alternative UIs is as easy as with any other Nextion screen***. Or at least that’s what we thought. Every custom firmware suffered of the same serious touch offset of about 30 pixels. The stock UI however doesn’t. Didn’t take long to find out that the stock firmware used a so far unknown command: lcd_dev. Truth be told, we don’t understand what its capabilities are but copying it with the exact arguments as used in the Sonoff firmware fixes the touch offset.
This discovery lead to the question what other commands there are that are hidden - and guess what: there’re quite a few and they’re way too interesting to not share them: Full Instruction Set

Before I wrote this post I asked Patrick and Thierry for what reason even “normal” commands like the qrcode command are not available to users. Unfortunately the reply was that they won’t comment on this and that anything outside the official instruction set would void your warranty.
With regards to the lcd_dev command I can understand the point. However, for draw commands like qrcode I can’t tell you why they’re hiding it. The obvious thought was it must be an unstable/new/not-ready/…" command. So I had a look at the QR component and guess what. It uses this exact command internally (you’ll find the same instruction in the TFT file in both cases). This is not surprising; actually the opposite would be much more suprising. But it pretty much defeats every reasonable argument for their behavior.
Honestly, my best guess is that they forgot to add it to the NIS when introducing the QR code component…

As a “proof of concept” I created a demo that makes a QR code walk around the screen, updating itself with its current coordinates. Additionally it shows you the current CPU load. You could already do the animation part on the intelligent series but this demo works on all series. There are more useful use cases for this of course; being able to display QR codes from an Arduino can be very useful! In my opinion way too useful to hide.

Happy hacking!
Max

Click to get to the demo


*** Nextion does not make it easy to create a UI as shown by the Sonoff product or the discovery series promo pictures! A lot of extra work is required to do so.
In my opinion the Sonoff NSPanel is a perfect example of what Nextion is not suited for. Nextions selling point is that it makes simple to medium UIs very quick to develop and that you don’t have to code the widgets yourself. Drag, drop, done. That’s the reason why people buy them and why their high price (compared to simple LCD panels) is justified. Sonoffs UI is not simple, requires developing custom widgets anyways and it’s not a low volume product.
The widget I talked about is the round slider. It is also shown in the promotional pictures of the discovery series on Nextions home page, giving the illusion this would be what you get. It’s not. You have to code it yourself. Additionally you can’t code it in a fully-featured programming language or using a decent editor, no, you have to do it in Nextions limited, prorpietary language using their editor.
In my very personal opinion Sonoff could have created an at least as appealing yet cheaper product by omitting the Nextion part alltogether and running the UI on the ESP32. Many people have shown that it’s more than capable enough to do so using free UI libraries much more powerful than Nextion. They spent time and money making all this custom stuff on Nextion (including a JSON parser btw. Yes. On Nextion.) while a ready-to-use solution like openHASP exists. It uses similar hardware and the library linked above, meaning a circular slider is built-in. All they’d have needed to do is maybe create a custom look and be done.

5 Likes

Agree, I was highly tempted to back this during the KS. But when I researched in detail I had some guy feeling that it would be a huge uphill and closed source battle

The deep research you have done is supporting this.

They could have had an awesome product, with high sales volume, and less engineering effort… But they have through that away

2 Likes

nstr
Converts an integer to string. Writes the result to the topmost component (use f.ex. ref x plus doevents to bring the desired component to the top).

3: input_int, digits, 0=dec 1=hex

2 Likes

Thanks for the input @lemax!

Actually when I test it (1.63.3, NX8048T050 in the debugger) I get this:
input_int, length, 0=dec 1=currency 2=hex - just like the corresponding attributes of the normal number component.
Did you actually get different results? If so, could you please share some details about how to get them?

Kind regards,
Max

Your test it’s right. It’s my same result and it works with all the display series.

1 Like

Hey Max… sad but true, just came along this side after bricking one of my Sonoff NSPanels with trying to upload custom “firmware” (nspanel.tft) to it. There was no possibility that I found to cancel the upload and it was stuck after 3% while I don’t know why.
Anyhow, I have found your article now and wondered if I can either unbrick the device with your help or - probably even better - move to the described possibility to use the ESP32 to even handle the display.

Would you mind to support me here?

Thanks a lot for your investment upfront!

Welcome @GreatSUN,

First of all, the Nextion screens are rather robust when it comes to firmware uploads. Usually a power cycle is enough to start a fresh upload.

As for driving the screen from the ESP32, that was meant in the sense of having a bare display directly connected to the ESP32 (f.ex. over SPI) and then running lvgl on the ESP32. There are quite a few examples out there about this. The key point though is that with NSPanel the ESP32 is not connected to the display. It communicates over serial with another microcontroller, which in turn handles the whole Nextion UI and display interfacing. You could of course try to flash this microcontroller with your own firmware that uses lvgl but that hasn’t been done so far and would likely require quite a bit of work to get started.
Other than that you’re pretty much stuck with having to deal with Nextion.

Kind regards,
Max