OpenMarine
LCD I2C Node-Red - Printable Version

+- OpenMarine (https://forum.openmarine.net)
+-- Forum: OpenPlotter (https://forum.openmarine.net/forumdisplay.php?fid=1)
+--- Forum: How I did it (https://forum.openmarine.net/forumdisplay.php?fid=6)
+--- Thread: LCD I2C Node-Red (/showthread.php?tid=3164)



LCD I2C Node-Red - Romarin - 2020-12-30

Bonjour,
J'ai installer un écran LCD 20x4 I2C sur Mon RPi4 en utilisant :

node-red-contrib-lcd20x4-i2c

   

Le code que j'ai mis en place
Code:
[{"id":"daed4568.f8a7d8","type":"tab","label":"LCD 1","disabled":false,"info":""},{"id":"5c7a63fc.d041e4","type":"LCD20x4-I2C","z":"daed4568.f8a7d8","name":"LCD20x4","speed":"3","size":"20x4","address":"0x27","x":1080,"y":240,"wires":[]},{"id":"924c4048.97a328","type":"function","z":"daed4568.f8a7d8","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.\";\n\nvar V1 = flow.get('envInTemp');\nvar V2 = flow.get('envInHumi');\nvar V3 = flow.get('envOutTemp');\nvar V4 = flow.get('envOutHumi');\nvar V5 = flow.get('envOutPres');\nvar V6 = flow.get('navPosLat');\nvar V7 = flow.get('navPosLon');\n\nvar sString01 = \"I\" + V1 + \"\\xDFC \" + V2 + \"%\" + \"  Hpa\";\nvar sString02 = \"O\" + V3 + \"\\xDFC \" + V4 + \"%\" + \" \" + V5;\nvar sString03 = \" \";\nvar sString04 = V6 + \" \" + V7;\n//var iPos01 = 1;\n//var iPos02 = 2;\n//var iPos03 = 3;\n//var iPos04 = 4;\n//var bCenter01 = true;\n//var bCenter02 = true;\n//var bCenter03 = false;\n//var bCenter04 = false;\n\nmsg.payload = {\n\tmsgs:[\n\t\t{\n\t\t\tmsg:sString01,\n\t\t\tpos:1,\n\t\t\tcenter:false\n\t\t},\n\t\t{\n\t\t\tmsg:sString02,\n\t\t\tpos:1,\n\t\t\tcenter:false\n\t\t},\n\t\t{\n\t\t\tmsg:sString03,\n\t\t\tpos:1,\n\t\t\tcenter:false\n\t\t},\n\t\t{\n\t\t\tmsg:sString04,\n\t\t\tpos:1,\n\t\t\tcenter:false\n\t\t}\n\t]\n};\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":920,"y":240,"wires":[["5c7a63fc.d041e4"]]},{"id":"b113533e.df98a8","type":"comment","z":"daed4568.f8a7d8","name":"LCD I2C 20x4","info":"","x":130,"y":140,"wires":[]},{"id":"39bfc90f.c5de4e","type":"signalk-on-delta","z":"daed4568.f8a7d8","name":"","context":"vessels.self","flatten":true,"x":140,"y":220,"wires":[["3bc8e1d2.744abe"]]},{"id":"3bc8e1d2.744abe","type":"switch","z":"daed4568.f8a7d8","name":"TopicSelect","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"environment.inside.temperature","vt":"str"},{"t":"eq","v":"environment.inside.relativeHumidity","vt":"str"},{"t":"eq","v":"environment.outside.temperature","vt":"str"},{"t":"eq","v":"environment.outside.humidity","vt":"str"},{"t":"eq","v":"environment.outside.pressure","vt":"str"},{"t":"eq","v":"navigation.position","vt":"str"}],"checkall":"true","repair":false,"outputs":6,"x":330,"y":220,"wires":[["40056ee7.d7dcf8"],["2cab1f6e.1fde9"],["6e118c2d.ca05ec"],["59c29f51.f94c1"],["2fac89c3.4ebce6"],["d453db17.bf6788"]]},{"id":"40056ee7.d7dcf8","type":"function","z":"daed4568.f8a7d8","name":"environment.inside.temperature","func":"var numInput = Number(msg.payload);\nvar T =  numInput-273.15;\nmsg.payload = T.toFixed(1);\n\nif(msg.topic == \"environment.inside.temperature\")\n    flow.set(\"envInTemp\", msg.payload);\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":630,"y":100,"wires":[["924c4048.97a328"]]},{"id":"2cab1f6e.1fde9","type":"function","z":"daed4568.f8a7d8","name":"environment.inside.relativeHumidity","func":"var T = Number(msg.payload);\nmsg.payload = T.toFixed(1);\n\nif(msg.topic == \"environment.inside.relativeHumidity\")\n    flow.set(\"envInHumi\", msg.payload);\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":640,"y":140,"wires":[["924c4048.97a328"]]},{"id":"6e118c2d.ca05ec","type":"function","z":"daed4568.f8a7d8","name":"environment.outside.temperature","func":"var numInput = Number(msg.payload);\nvar T =  numInput-273.15;\nmsg.payload = T.toFixed(1);\n\nif(msg.topic == \"environment.outside.temperature\")\n    flow.set(\"envOutTemp\", msg.payload);\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":640,"y":180,"wires":[["924c4048.97a328"]]},{"id":"59c29f51.f94c1","type":"function","z":"daed4568.f8a7d8","name":"environment.outside.humidity","func":"var T = Number(msg.payload);\nmsg.payload = T.toFixed(1);\n\nif(msg.topic == \"environment.outside.humidity\")\n    flow.set(\"envOutHumi\", msg.payload);\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":630,"y":220,"wires":[["924c4048.97a328"]]},{"id":"2fac89c3.4ebce6","type":"function","z":"daed4568.f8a7d8","name":"environment.outside.pressure","func":"var numInput = Number(msg.payload);\nvar T =  numInput/100;\nmsg.payload = T.toFixed(1);\n\nif(msg.topic == \"environment.outside.pressure\")\n    flow.set(\"envOutPres\", msg.payload);\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":630,"y":260,"wires":[["924c4048.97a328"]]},{"id":"fbe379f5.28f8c","type":"function","z":"daed4568.f8a7d8","name":"navigation.position.latitude","func":"var N0S = 0;\nvar T = Number(msg.payload);\n\nif(Math.sign(T) == -1) {\n    N0S = \"S\";\n    T = Math.abs(T);\n} else if(Math.sign(T) == 1){\n    N0S = \"N\";\n}\n\nmsg.payload = T.toFixed(5) + N0S;\n\nif(msg.topic == \"latitude\")\n    flow.set(\"navPosLat\", msg.payload);\n\nreturn msg;","outputs":"1","noerr":0,"initialize":"","finalize":"","x":620,"y":300,"wires":[["924c4048.97a328","7e8d1c3a.2e58f4"]]},{"id":"d453db17.bf6788","type":"split","z":"daed4568.f8a7d8","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"topic","x":170,"y":320,"wires":[["11b79409.7cd8d4"]]},{"id":"11b79409.7cd8d4","type":"switch","z":"daed4568.f8a7d8","name":"topicSelect","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"latitude","vt":"str"},{"t":"eq","v":"longitude","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":330,"y":320,"wires":[["fbe379f5.28f8c"],["9b0aee7.171b91"]]},{"id":"9b0aee7.171b91","type":"function","z":"daed4568.f8a7d8","name":"navigation.position.longitude","func":"var E0W = 0;\nvar T = Number(msg.payload);\n\nif(Math.sign(T) == -1) {\n    E0W = \"W\";\n    T = Math.abs(T);\n} else if(Math.sign(T) == 1){\n    E0W = \"E\";\n}\n\nmsg.payload = T.toFixed(5) + E0W;\n\nif(msg.topic == \"longitude\")\n    flow.set(\"navPosLon\", msg.payload);\n\nreturn msg;","outputs":"1","noerr":0,"initialize":"","finalize":"","x":620,"y":340,"wires":[["924c4048.97a328","ea0ca9bb.d9e4"]]},{"id":"7e8d1c3a.2e58f4","type":"debug","z":"daed4568.f8a7d8","name":"","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":960,"y":300,"wires":[]},{"id":"ea0ca9bb.d9e4","type":"debug","z":"daed4568.f8a7d8","name":"","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":970,"y":380,"wires":[]}]

Il y a encore du travail pour la présentation et l'ajout d'options mais ça se présente bien.

En espérant que ma contribution puisse vous aider ?

Actuellement le résultat est comme ceci :

   


RE: LCD I2C Node-Red - Romarin - 2021-01-08

Update with better stability :
Code:
[{"id":"5c7a63fc.d041e4","type":"LCD20x4-I2C","z":"daed4568.f8a7d8","name":"LCD20x4","speed":"1","size":"20x4","address":"0x27","x":1300,"y":240,"wires":[]},{"id":"924c4048.97a328","type":"function","z":"daed4568.f8a7d8","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.\";\n\nvar V1 = flow.get('envInTemp');\nvar V2 = flow.get('envInHumi');\nvar V3 = flow.get('envOutTemp');\nvar V4 = flow.get('envOutHumi');\nvar V5 = flow.get('envOutPres');\nvar V6 = flow.get('navPosLat');\nvar V7 = flow.get('navPosLon');\n\nvar sString01 = \"I\" + V1 + \"\\xDFC \" + V2 + \"%\" + \"  Hpa\";\nvar sString02 = \"O\" + V3 + \"\\xDFC \" + V4 + \"%\" + \" \" + V5;\nvar sString03 = \" \";\nvar sString04 = V6 + \" \" + V7;\n//var iPos01 = 1;\n//var iPos02 = 2;\n//var iPos03 = 3;\n//var iPos04 = 4;\n//var bCenter01 = true;\n//var bCenter02 = true;\n//var bCenter03 = false;\n//var bCenter04 = false;\n\nmsg.payload = {\n\tmsgs:[\n\t\t{\n\t\t\tmsg:sString01,\n\t\t\tpos:1,\n\t\t\tcenter:false\n\t\t},\n\t\t{\n\t\t\tmsg:sString02,\n\t\t\tpos:1,\n\t\t\tcenter:false\n\t\t},\n\t\t{\n\t\t\tmsg:sString03,\n\t\t\tpos:1,\n\t\t\tcenter:false\n\t\t},\n\t\t{\n\t\t\tmsg:sString04,\n\t\t\tpos:1,\n\t\t\tcenter:false\n\t\t}\n\t]\n};\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":920,"y":240,"wires":[["50001641.29a84"]]},{"id":"b113533e.df98a8","type":"comment","z":"daed4568.f8a7d8","name":"LCD I2C 20x4","info":"","x":130,"y":140,"wires":[]},{"id":"39bfc90f.c5de4e","type":"signalk-on-delta","z":"daed4568.f8a7d8","name":"","context":"vessels.self","flatten":true,"x":140,"y":220,"wires":[["3bc8e1d2.744abe"]]},{"id":"3bc8e1d2.744abe","type":"switch","z":"daed4568.f8a7d8","name":"TopicSelect","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"environment.inside.temperature","vt":"str"},{"t":"eq","v":"environment.inside.relativeHumidity","vt":"str"},{"t":"eq","v":"environment.outside.temperature","vt":"str"},{"t":"eq","v":"environment.outside.humidity","vt":"str"},{"t":"eq","v":"environment.outside.pressure","vt":"str"},{"t":"eq","v":"navigation.position","vt":"str"}],"checkall":"true","repair":false,"outputs":6,"x":330,"y":220,"wires":[["40056ee7.d7dcf8"],["2cab1f6e.1fde9"],["6e118c2d.ca05ec"],["59c29f51.f94c1"],["2fac89c3.4ebce6"],["d453db17.bf6788"]]},{"id":"2cab1f6e.1fde9","type":"function","z":"daed4568.f8a7d8","name":"environment.inside.relativeHumidity","func":"var T = Number(msg.payload);\nmsg.payload = T.toFixed(1);\n\nif(msg.topic == \"environment.inside.relativeHumidity\")\n    flow.set(\"envInHumi\", msg.payload);\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":640,"y":140,"wires":[["924c4048.97a328"]]},{"id":"6e118c2d.ca05ec","type":"function","z":"daed4568.f8a7d8","name":"environment.outside.temperature","func":"var numInput = Number(msg.payload);\nvar T =  numInput-273.15;\nmsg.payload = T.toFixed(1);\n\nif(msg.topic == \"environment.outside.temperature\")\n    flow.set(\"envOutTemp\", msg.payload);\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":640,"y":180,"wires":[["924c4048.97a328"]]},{"id":"59c29f51.f94c1","type":"function","z":"daed4568.f8a7d8","name":"environment.outside.humidity","func":"var T = Number(msg.payload);\nmsg.payload = T.toFixed(1);\n\nif(msg.topic == \"environment.outside.humidity\")\n    flow.set(\"envOutHumi\", msg.payload);\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":630,"y":220,"wires":[["924c4048.97a328"]]},{"id":"2fac89c3.4ebce6","type":"function","z":"daed4568.f8a7d8","name":"environment.outside.pressure","func":"var numInput = Number(msg.payload);\nvar T =  numInput/100;\nmsg.payload = T.toFixed(1);\n\nif(msg.topic == \"environment.outside.pressure\")\n    flow.set(\"envOutPres\", msg.payload);\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":630,"y":260,"wires":[["924c4048.97a328"]]},{"id":"fbe379f5.28f8c","type":"function","z":"daed4568.f8a7d8","name":"navigation.position.latitude","func":"var N0S = 0;\nvar T = Number(msg.payload);\n\nif(Math.sign(T) == -1) {\n    N0S = \"S\";\n    T = Math.abs(T);\n} else if(Math.sign(T) == 1){\n    N0S = \"N\";\n}\n\nmsg.payload = T.toFixed(5) + N0S;\n\nif(msg.topic == \"latitude\")\n    flow.set(\"navPosLat\", msg.payload);\n\nreturn msg;","outputs":"1","noerr":0,"initialize":"","finalize":"","x":620,"y":300,"wires":[["924c4048.97a328"]]},{"id":"d453db17.bf6788","type":"split","z":"daed4568.f8a7d8","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"topic","x":170,"y":320,"wires":[["11b79409.7cd8d4"]]},{"id":"11b79409.7cd8d4","type":"switch","z":"daed4568.f8a7d8","name":"topicSelect","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"latitude","vt":"str"},{"t":"eq","v":"longitude","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":330,"y":320,"wires":[["fbe379f5.28f8c"],["9b0aee7.171b91"]]},{"id":"9b0aee7.171b91","type":"function","z":"daed4568.f8a7d8","name":"navigation.position.longitude","func":"var E0W = 0;\nvar T = Number(msg.payload);\n\nif(Math.sign(T) == -1) {\n    E0W = \"W\";\n    T = Math.abs(T);\n} else if(Math.sign(T) == 1){\n    E0W = \"E\";\n}\n\nmsg.payload = T.toFixed(5) + E0W;\n\nif(msg.topic == \"longitude\")\n    flow.set(\"navPosLon\", msg.payload);\n\nreturn msg;","outputs":"1","noerr":0,"initialize":"","finalize":"","x":620,"y":340,"wires":[["924c4048.97a328"]]},{"id":"40056ee7.d7dcf8","type":"function","z":"daed4568.f8a7d8","name":"environment.inside.temperature","func":"var numInput = Number(msg.payload);\nvar T =  numInput-273.15;\nmsg.payload = T.toFixed(1);\n\nif(msg.topic == \"environment.inside.temperature\")\n    flow.set(\"envInTemp\", msg.payload);\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":630,"y":100,"wires":[["924c4048.97a328"]]},{"id":"50001641.29a84","type":"delay","z":"daed4568.f8a7d8","name":"","pauseType":"timed","timeout":"30","timeoutUnits":"seconds","rate":"1","nbRateUnits":"10","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":1100,"y":240,"wires":[["5c7a63fc.d041e4"]]}]