# Node-red-contrib-lcd20x4-i2c Example Prob

**URL:** <https://discourse.nodered.org/t/node-red-contrib-lcd20x4-i2c-example-prob/18323>\
**Category:** General\
**Created:** [23 November 2019 16:23 UTC](https://discourse.nodered.org/t/node-red-contrib-lcd20x4-i2c-example-prob/18323 "2019-11-23T16:23:27Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![pinie\_pinie](https://avatars.discourse-cdn.com/v4/letter/p/ccd318/32.png) [@pinie\_pinie](https://discourse.nodered.org/u/pinie_pinie)\
**Post date:** [23 November 2019 16:23 UTC](https://discourse.nodered.org/t/node-red-contrib-lcd20x4-i2c-example-prob/18323/1 "2019-11-23T16:23:27Z")

</div>

Hi,  
I currently use a LCD Display 4x20 I2C.  
I loaded the driver and a sample flow. The thing actually works.  
Now I want to display several data from a BME280 (temperature, humidity, etc.) (per line). The problem arises when I control the funtions flow with 3 different payloads. One alone works without problems.  
Does anyone have a hint for me?

Many thanks

Thoralf

```auto
// Line Number Msg String Start Position Centered
// 1 Date/Time Ignored true
// 2 "Test line 2." 2 false
// 3 "Test line 3." 3 false
// 4 "Test line 4." 4 false

//var sString01 = "Test line 1.";
var sString01 = msg.payload.Zeile1;
var sString02 = msg.payload.Zeile2;
var sString03 = msg.payload.Zeile3;
var sString04 = "Test line 4.";
var iPos01 = 1;
var iPos02 = 2;
var iPos03 = 3;
var iPos04 = 4;
var bCenter01 = true;
var bCenter02 = false;
var bCenter03 = false;
var bCenter04 = false;

msg.payload = {
	msgs:[
		{
			msg:sString01,
			pos:iPos01,
			center:bCenter01
		},
		{
			msg:sString02,
			pos:iPos02,
			center:bCenter02
		},
		{
			msg:sString03,
			pos:iPos03,
			center:bCenter03
		},
		{
			msg:sString04,
			pos:iPos04,
			center:bCenter04
		}
	]
};

return msg;

```

---

<div class="post-metadata">

**Author:** ![troubleinparadise](https://avatars.discourse-cdn.com/v4/letter/t/278dde/32.png) [@troubleinparadise](https://discourse.nodered.org/u/troubleinparadise)\
**Post date:** [26 February 2021 10:52 UTC](https://discourse.nodered.org/t/node-red-contrib-lcd20x4-i2c-example-prob/18323/2 "2021-02-26T10:52:17Z")

</div>

I wondered the same thing and worked it out as below. May not be the most elegant but it works. This is what I am using with [OpenWeathermap.org](http://OpenWeathermap.org) as a small weather forecast screen. The "moment" node expects milliseconds where as OWM outputs "seconds" hence the conversion node for sunset. Hope the helps someone, took me a while to figure out 🙂

```auto
[{"id":"85f380c9.e053d8","type":"LCD20x4-I2C","z":"f7ec13e8.052da","name":"LCD2004","speed":"3","size":"20x4","address":"0x27","x":775,"y":103,"wires":[]},{"id":"a98430c6.88ced","type":"function","z":"f7ec13e8.052da","name":"Message","func":"// Line Number Msg String Start Position Centered\n// 1 Date/Time Ignored true\n// 2 \"Test line 2.\" 2 false\n// 3 \"Test line 3.\" 3 false\n// 4 \"Test line 4.\" 4 false\n\n//var sString01 = \"Test line 1.\";\nvar sString01 = msg.payload1;\nvar sString02 = msg.payload2;\nvar sString03 = msg.payload3;\nvar sString04 = msg.payload4;\nvar iPos01 = 1;\nvar iPos02 = 1;\nvar iPos03 = 1;\nvar iPos04 = 1;\nvar bCenter01 = false;\nvar bCenter02 = false;\nvar bCenter03 = false;\nvar bCenter04 = false;\n\nmsg.payload = {\n\tmsgs:[\n\t\t{\n\t\t\tmsg:sString01,\n\t\t\tpos:iPos01,\n\t\t\tcenter:bCenter01\n\t\t},\n\t\t{\n\t\t\tmsg:sString02,\n\t\t\tpos:iPos02,\n\t\t\tcenter:bCenter02\n\t\t},\n\t\t{\n\t\t\tmsg:sString03,\n\t\t\tpos:iPos03,\n\t\t\tcenter:bCenter03\n\t\t},\n\t\t{\n\t\t\tmsg:sString04,\n\t\t\tpos:iPos04,\n\t\t\tcenter:bCenter04\n\t\t}\n\t]\n};\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":615,"y":103,"wires":[["85f380c9.e053d8"]]},{"id":"8787a85d.339ae","type":"inject","z":"f7ec13e8.052da","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"1","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":115,"y":103,"wires":[["7bf13a26.c9e3dc"]]},{"id":"7bf13a26.c9e3dc","type":"moment","z":"f7ec13e8.052da","name":"Clock","topic":"","input":"payload","inputType":"msg","inTz":"Australia/Melbourne","adjAmount":0,"adjType":"days","adjDir":"add","format":"ddd DD-MM HH:mm:ss","locale":"en_US","output":"payload","outputType":"msg","outTz":"Australia/Melbourne","x":270,"y":100,"wires":[["ce4981d9.5db538"]]},{"id":"ce4981d9.5db538","type":"change","z":"f7ec13e8.052da","name":"","rules":[{"t":"set","p":"payload1","pt":"msg","to":"payload","tot":"msg"},{"t":"set","p":"payload2","pt":"msg","to":"payloadtempminc","tot":"flow"},{"t":"set","p":"payload3","pt":"msg","to":"payloadtempc","tot":"flow"},{"t":"set","p":"payload4","pt":"msg","to":"payloaddetail","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":455,"y":103,"wires":[["a98430c6.88ced"]]},{"id":"5f430fb8.9228b","type":"openweathermap in","z":"f7ec13e8.052da","name":"my city","wtype":"current","lon":"","lat":"","city":"mycity","country":"Australia","language":"en","x":55,"y":183,"wires":[["e3979798.7065a","1c44c37d.6e1415","5ef3b14f.d61b3","8e51c6b3.55a28"]]},{"id":"5ef3b14f.d61b3","type":"change","z":"f7ec13e8.052da","name":"Line 4","rules":[{"t":"set","p":"payload.ss","pt":"msg","to":"sunset","tot":"flow"},{"t":"set","p":"payload","pt":"msg","to":"msg.payload.detail & \" SS:\" & msg.payload.ss","tot":"jsonata"},{"t":"move","p":"payload","pt":"msg","to":"payloaddetail","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":215,"y":243,"wires":[[]]},{"id":"e3979798.7065a","type":"change","z":"f7ec13e8.052da","name":"Line 3","rules":[{"t":"set","p":"payload.tempc","pt":"msg","to":"$string(\"Now:\" & msg.payload.tempc & \" Wind:\" & msg.payload.windspeed)","tot":"jsonata"},{"t":"set","p":"payloadtempc","pt":"flow","to":"payload.tempc","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":215,"y":203,"wires":[[]]},{"id":"1c44c37d.6e1415","type":"change","z":"f7ec13e8.052da","name":"Line 2","rules":[{"t":"set","p":"payload.temp_minc","pt":"msg","to":"$string(\"Min:\" & msg.payload.temp_minc & \" Max:\" & msg.payload.temp_maxc)","tot":"jsonata"},{"t":"set","p":"payloadtempminc","pt":"flow","to":"payload.temp_minc","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":215,"y":163,"wires":[[]]},{"id":"68317a58.eee4fc","type":"moment","z":"f7ec13e8.052da","name":"AU Time","topic":"","input":"payload","inputType":"msg","inTz":"ETC/utc","adjAmount":0,"adjType":"days","adjDir":"add","format":"hh:mm","locale":"en_US","output":"sunset","outputType":"flow","outTz":"Australia/Melbourne","x":300,"y":300,"wires":[[]]},{"id":"8e51c6b3.55a28","type":"change","z":"f7ec13e8.052da","name":"secs 2 mill","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.sunset","tot":"msg"},{"t":"set","p":"payload","pt":"msg","to":"(msg.payload)*1000","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":135,"y":283,"wires":[["68317a58.eee4fc"]]}]

```

---

<div class="post-metadata">

**Author:** ![FeliceM](https://avatars.discourse-cdn.com/v4/letter/f/ec9cab/32.png) [@FeliceM](https://discourse.nodered.org/u/FeliceM)\
**Post date:** [18 May 2021 04:41 UTC](https://discourse.nodered.org/t/node-red-contrib-lcd20x4-i2c-example-prob/18323/3 "2021-05-18T04:41:08Z")

</div>

Hi @pinie_pinie ,  
I was reading your post because I am battling to get the same lcd to work.  
I noted you wrote "I loaded the driver". Which driver did you load? I cannot find references to a driver anywhere.  
I am using this simple test code and nothing show up on the LCD.

```auto
msg.payload = {
    msgs: [
        {
            msg: "string 1",
            pos: 1,
            center: false
        },
        {
            msg: "string 2",
            pos: 1,
            center: false
        },
        {
            msg: "string 3",
            pos: 1,
            center: false
        },
        {
            msg: "string 4",
            pos: 1,
            center: false
        }
    ]
};
return msg;

```

```auto
[{"id":"68620dec.471824","type":"function","z":"d03db583.ed3bf8","name":"","func":"msg.payload = {\n msgs: [\n {\n msg: \"string 1\",\n pos: 1,\n center: false\n },\n {\n msg: \"string 2\",\n pos: 1,\n center: false\n },\n {\n msg: \"string 3\",\n pos: 1,\n center: false\n },\n {\n msg: \"string 4\",\n pos: 1,\n center: false\n }\n]\n};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":610,"y":620,"wires":[["37c3b15c.e271ae","89628ca2.37b84"]]},{"id":"49c51228.b9a06c","type":"inject","z":"d03db583.ed3bf8","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":450,"y":620,"wires":[["68620dec.471824"]]},{"id":"37c3b15c.e271ae","type":"debug","z":"d03db583.ed3bf8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":920,"y":580,"wires":[]},{"id":"89628ca2.37b84","type":"LCD20x4-I2C","z":"d03db583.ed3bf8","name":"","speed":"3","size":"20x4","address":"0x27","x":950,"y":520,"wires":[]}]

```

Any hint?  
Thanks

---

<div class="post-metadata">

**Author:** ![pinie\_pinie](https://avatars.discourse-cdn.com/v4/letter/p/ccd318/32.png) [@pinie\_pinie](https://discourse.nodered.org/u/pinie_pinie)\
**Post date:** [18 May 2021 07:39 UTC](https://discourse.nodered.org/t/node-red-contrib-lcd20x4-i2c-example-prob/18323/4 "2021-05-18T07:39:07Z")

</div>

> [@FeliceM](#):
>
> `[{"id":"68620dec.471824","type":"function","z":"d03db583.ed3bf8","name":"","func":"msg.payload = {\n msgs: [\n {\n msg: \"string 1\",\n pos: 1,\n center: false\n },\n {\n msg: \"string 2\",\n pos: 1,\n center: false\n },\n {\n msg: \"string 3\",\n pos: 1,\n center: false\n },\n {\n msg: \"string 4\",\n pos: 1,\n center: false\n }\n]\n};\nreturn msg;","outputs":1,"noerr"`

Hello,

I'm not the specialist either, but maybe a few experiences.  
By driver I meant loading the node for the LCD via the palette. Since you made it seem.  
Important: Which I2C address does your display have? This must be set accordingly in the node. There is a contrast regulator on my display (you can turn it with a screwdriver). If it is not set correctly, you will not see anything on the display.  
In your flow you always describe the same line (always the 1)  
Take a look at my flow (above) I address each line individually.  
Maybe my hints will help you.

pine\_pinie

---

<div class="post-metadata">

**Author:** ![FeliceM](https://avatars.discourse-cdn.com/v4/letter/f/ec9cab/32.png) [@FeliceM](https://discourse.nodered.org/u/FeliceM)\
**Post date:** [18 May 2021 08:08 UTC](https://discourse.nodered.org/t/node-red-contrib-lcd20x4-i2c-example-prob/18323/5 "2021-05-18T08:08:01Z")

</div>

@pinie_pinie ,  
thanks for your directions.  
I have tested the LCD on I2C from a Python script and it is working. I had to adjust the contrast 🙂  
I tested your script, slightly modified because I don't have the weather service in place.  
This the modified flow:

```auto
[{"id":"e419e96c.307c98","type":"debug","z":"6d534d3c.fd93f4","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1050,"y":1120,"wires":[]},{"id":"66ca2d4d.960954","type":"LCD20x4-I2C","z":"6d534d3c.fd93f4","name":"LCD2004","speed":"3","size":"20x4","address":"0x27","x":1120,"y":1020,"wires":[]},{"id":"1f0d7.525e9f29b","type":"function","z":"6d534d3c.fd93f4","name":"Message","func":"// Line Number Msg String Start Position Centered\n// 1 Date/Time Ignored true\n// 2 \"Test line 2.\" 2 false\n// 3 \"Test line 3.\" 3 false\n// 4 \"Test line 4.\" 4 false\n\n//var sString01 = \"Test line 1.\";\nvar sString01 = \"msg.payload1\";\nvar sString02 = \"msg.payload2\";\nvar sString03 = \"msg.payload3\";\nvar sString04 = \"msg.payload4\";\nvar iPos01 = 1;\nvar iPos02 = 1;\nvar iPos03 = 1;\nvar iPos04 = 1;\nvar bCenter01 = false;\nvar bCenter02 = false;\nvar bCenter03 = false;\nvar bCenter04 = false;\n\nmsg.payload = {\n\tmsgs:[\n\t\t{\n\t\t\tmsg:sString01,\n\t\t\tpos:iPos01,\n\t\t\tcenter:bCenter01\n\t\t},\n\t\t{\n\t\t\tmsg:sString02,\n\t\t\tpos:iPos02,\n\t\t\tcenter:bCenter02\n\t\t},\n\t\t{\n\t\t\tmsg:sString03,\n\t\t\tpos:iPos03,\n\t\t\tcenter:bCenter03\n\t\t},\n\t\t{\n\t\t\tmsg:sString04,\n\t\t\tpos:iPos04,\n\t\t\tcenter:bCenter04\n\t\t}\n\t]\n};\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":840,"y":1020,"wires":[["66ca2d4d.960954","e419e96c.307c98"]]},{"id":"3bfbf6bb.24348a","type":"inject","z":"6d534d3c.fd93f4","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":330,"y":1020,"wires":[["63b32ab1.2eaf24"]]},{"id":"63b32ab1.2eaf24","type":"moment","z":"6d534d3c.fd93f4","name":"Clock","topic":"","input":"payload","inputType":"msg","inTz":"Australia/Melbourne","adjAmount":0,"adjType":"days","adjDir":"add","format":"ddd DD-MM HH:mm:ss","locale":"en_US","output":"payload","outputType":"msg","outTz":"Australia/Melbourne","x":495,"y":1017,"wires":[["9197b194.2ceb9"]]},{"id":"9197b194.2ceb9","type":"change","z":"6d534d3c.fd93f4","name":"","rules":[{"t":"set","p":"payload1","pt":"msg","to":"payload","tot":"msg"},{"t":"set","p":"payload2","pt":"msg","to":"payloadtempminc","tot":"flow"},{"t":"set","p":"payload3","pt":"msg","to":"payloadtempc","tot":"flow"},{"t":"set","p":"payload4","pt":"msg","to":"payloaddetail","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":680,"y":1020,"wires":[["1f0d7.525e9f29b"]]}]

```

Basically I just replaced the data with a string.  
The lcd is still not showing the content! I am going crazy with this!  
I am very lost, don't know what to do next. I wonder if the LCD node is working on my Raspberry  
PRETTY\_NAME="Raspbian GNU/Linux 10 (buster)"  
NAME="Raspbian GNU/Linux"  
VERSION\_ID="10"  
VERSION="10 (buster)"  
VERSION\_CODENAME=buster  
ID=raspbian  
ID\_LIKE=debian

---

<div class="post-metadata">

**Author:** ![zenofmud](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/zenofmud/32/316_2.png) [@zenofmud](https://discourse.nodered.org/u/zenofmud)\
**Post date:** [18 May 2021 08:21 UTC](https://discourse.nodered.org/t/node-red-contrib-lcd20x4-i2c-example-prob/18323/6 "2021-05-18T08:21:36Z")

</div>

> [@FeliceM](#):
>
> I wonder if the LCD node is working on my Raspberry

Did you install python-smbus as it tells you to in the [node's description](https://flows.nodered.org/node/node-red-contrib-lcd20x4-i2c)?

 ![Screen Shot 2021-05-18 at 4.20.50 AM](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/c/8/c806c5e314c69d4533d9eb1a069b8c1cce626226.png)

---

<div class="post-metadata">

**Author:** ![FeliceM](https://avatars.discourse-cdn.com/v4/letter/f/ec9cab/32.png) [@FeliceM](https://discourse.nodered.org/u/FeliceM)\
**Post date:** [18 May 2021 08:25 UTC](https://discourse.nodered.org/t/node-red-contrib-lcd20x4-i2c-example-prob/18323/7 "2021-05-18T08:25:43Z")

</div>

Hi @zenofmud ,  
yes I did. I have other devices running on I2C (different addresses).

pi@raspberrypi:~ $ sudo apt-get install python-smbus  
Reading package lists... Done  
Building dependency tree  
Reading state information... Done  
python-smbus is already the newest version (4.1-1).  
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

---

<div class="post-metadata">

**Author:** ![vikingsraven](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/vikingsraven/32/49243_2.png) [@vikingsraven](https://discourse.nodered.org/u/vikingsraven)\
**Post date:** [24 October 2021 11:58 UTC](https://discourse.nodered.org/t/node-red-contrib-lcd20x4-i2c-example-prob/18323/8 "2021-10-24T11:58:55Z")

</div>

first things first, ok the LCD node is a bit of a pain , but once working is very good.  
there are a few on the posts on the forums and they have a working example.  
One thing to Check is the contrast on the display, this has bugged me for years , just because its not set to show characters.

```auto
[
    {
        "id": "6ee9c7891a7c2ec1",
        "type": "tab",
        "label": "Flow 2",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "ada2a4bcd0fb47d2",
        "type": "inject",
        "z": "6ee9c7891a7c2ec1",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "{\"msgs\":[{\"msg\":\"Hello World\",\"pos\":10,\"center\":true}]}",
        "payloadType": "json",
        "x": 230,
        "y": 80,
        "wires": [
            [
                "6ed5ded3a0e024c1"
            ]
        ]
    },
    {
        "id": "6ed5ded3a0e024c1",
        "type": "LCD20x4-I2C",
        "z": "6ee9c7891a7c2ec1",
        "name": "LCD",
        "speed": "3",
        "size": "20x4",
        "address": "0x27",
        "x": 430,
        "y": 80,
        "wires": []
    }
]

```

copy this flow into node red. and deploy.  
you should see system start up come up on the display, if not then its likely the python-SMBUS not running. Stop node red and start it again, the flow will just show hello world in the top line of the screen basic but get you started. Hope this helps  
Also dont use 2 LCD modules it screws things up!
