Améliorer un raspberry pour la domotique

Bonjour,
pour faire suite à mes améliorations
J’ai trouvé que mon RPI3 tenanit bien la route avec ma EMMC sur le slot sd

J’ai donc décidé de lui dessiner un nouveau boitiers avec des lumière et blablabla
Bref je vais me faire plaisir
Donc pour commencer je dessine une belle boite que je résine chez JLCPCB, bon à force ils faudrait qu’ils me sponsorise, vu toute la pub que je peux leurs faire, mince quoi


voila le stl mais il y a des modifs à faire, les plaques en plexi latérales sont du 100x100x4mm
Fantabulous Bombul (3).txt (1,2 Mo)
il faut remplacer le .txt en .stl bien sûre
j’achete un bon gros radiateur chez ali

Bonne et Zoli base
Je rajoute un ruban LED en ws2812b merci @krosand. et je le pilote avec NodeRed
IMPECCABLE


BAH NON!
PUT*** de SAL**** de radiateur pllus de bluetooth ni wifi MER**credi

Le temps passe, autre chose à faire puis après l’avoir démonté je remarque ça

HEIN ils auraient pas prévu ça???
ET SI, il faut gratter un peut le vernis et on peut souder une prise UFL et virer les resistance de 0Ohms qui mène sur l’antennee interne



Très bon résultat

Bon je veux pouvoir lui mettre pleins de protocole radio et un power bank
Du Enocean ( les interrupteur sans fils sans piles sont trop bien quand on a une maison en pierre et qu’on ne veut pas passer des cables entre chaque pierre)
du zigbee ( obligé les iot xiaomi ou tuya sont pas cher, et les ampoules philipps HUE c’est le top)
donc wifi et bleutooth on a maintenant
du LoRa sur lequel @PanoLyon travail dure
et on va pas se fermer sur ce qui arrive comme le Matter
donc il me faut plein d’UART et le RPI3 n’est pas bien fourni
on va donc envisager de faire un host USB et lui rajouter un ch344Q afin de rajouter 4 UART complets
on va encore faire du sale car je ne veux pas avoir des reprises de cable à l’exterieur de ma boite


je repique le port usb que je vais dériver sur ma carte le passer dans un GL850G (host USB 4 ports) et donc le revoyer via une sortie du chipset sur la prise, comme ça on garde les 4 ports USB

et on en rajoute 2
on en garde un pour le CH344Q pour rajouter 4 ports UART

Bon les schémas sont fait
On va maintenant réfléchir au power bank, car les coupure électrique sont légions chez moi, rien que le weekend dernier avec la tempête

2 « J'aime »

pour le power bank oui @JeedGeek il y en a plétore pour reprendre tes mots
mais aucun de fiable
je vais donc faire un copié collé de ce que j’ai déjà écrit

Citationle premier est d’éteindre corrctement le raspberry, odroid ou autre dèsque les batterie sont trop faibles pour ne pas éteindre salement le système par une coupure de courant, car avec un linux le résultat peu être fatale, corruptions de données car le système était en plein boom lors de l’extinction et donc le redémarrage est un enfer quant on arrive à le redémarrer
et l’autre problème est « si le courant reviens alors que le système est en train de s’éteindre » alors le système ne redémarre pas car physiquement la carte n’aura jamais eu d’absence de tension"
c’est sur ce point que j’ai un problème.
Je voudrais que le système redémarre automatiquement dans tous les cas.
j’ai essayé plein de choses, mais il me faudrait qu’un gpio soit actif lorsque l’os tourne et tombe lorsque le système arrive à la fin du « shutdown » ce qui permettrait de détecter le front descendant et donc couper l’alimentation 2 secondes pour pouvoir redémarrer automatiquement le raspberry.
j’ai aussi d’autre bricoles en tête à rajouter et c’est pourquoi j’ai laisser autant de place dans le boitiers de mon pi3
je veux aussi rajouter un controleur usb vers 4 uart pour pouvoir mettre proprement tous les protocole domotique du moment, enocean zigbee, le futur matter, et surtout ce sur quoi @PanoLyon travail dure une version du LoRa Mesh, malheureusement je l’ai abandonné il y a quelques semaine mais je vais remettre les pied dans le bain sous peu ( promis panoramix, @krosand je sais que ça t’interesse beaucoup aussi)

pour le gpio j’ai trouvé
il y a un truc de bien sur le RPI3, si le system est éteind les port usb ne sont pas alimenté, et ouais ça enlève des problèmes
on va donc souder un fils de plus

Je part sur une batterie standart type 18650 avec un charge classique le tp40556 qui a l’avantage d’avoir des info comme " en charge " ou « chargé », et si on a les deux => batterie absente et si on a rien => absence de 5v sur le port usb, interessant pour detecterl’absence de courant

le choix ce porte sur un usb type C pour alimenter TOUT le bazarre
et un booster de tension pour augmenter le 3.7V de la batterie en 5V pour le pi


puis pendant qu’on y est j’en rajout un pour faire du 12V pour un ventilo

bon il reste 2 choses
l’une d’elle consiste a pouvoir envoyer un « low battery » au pi pour qu’il enclenche un shutdown lorsque la batterie sera trop faible
Avec un aop en comparateur ça va jouer
et de quoi réenclencher le pi au retour du secteur, là il y a des jours de réflexion et il faut être tordu
(comme moi :wink: )
bref je continu et vous ferai part de mon roman photo par la suite

2 « J'aime »

Pour faire suite des aventures du weekend


J’avais déjà fais des tests et créé un premier prototype
réviser des routage et changé des valeurs de composants
sur cette photo la batterie est en charge

et là chargé

Bon premier problème le system m’affiche toujours « low power »
mince mais normal


comme j’alimente le RPI par les port gpio PP35 n’a pas de tension donc il faut désactiver cette info

$ sudo nano /boot/config.txt
et ajouter
avoid_warnings=1


puis $ sudo apt remove lxplug-ptbatt

pour désinstaller le plugin de scrutation d’énergie
question combien de temps ça tient
en plus mon rpi est gourmand 600mA de moyenne
la batterie lithium ( récup d’une batterie de pc portable) est à 4.2V chargé à bloque
on débranche brutalement
au bon de 17min la batterie est à 3.746V
Super on tient bien
avec node red on test les gpio pour gérer le pi avec le power back up, en gros on ne lui fout pas la paix en même temps


Je vous passerais on flow complet par la suite

Ah ça y est la carte à envoyé un NL1 sur la pin 22 du raspberry, ce qui veut dire que la tension de l’élément est inférieur à 3.4V et donc peut mettre en défaillance le système
Nodered voit cette info et pilote proprement un « shutdow -now »
impeccable le system s’éteind proprement au bout de 37min

Je trouve ça pas mal du tout
image
à gauche de l’AOP il y a un comparateur de tension pour envoyer le signal « low batt » au RPI, et à droite ce qui permet sur un front descendant d’activer une tempo de 2 seconde pour couper l’alimentation du raspberry et donc redémarrer automatique de raspberry en cas de réaparition du courant

Je vais donc finir de redessiner la version final
Pour l’USB host j’ai déjà testé donc je sais que c’est bon
reste une inconnu sur l’ajout des 4 UART

au final dans mon nodered

[
    {
        "id": "7be44a6482ebe106",
        "type": "mqtt in",
        "z": "7d3e99c836519d65",
        "name": "",
        "topic": "testing",
        "qos": "0",
        "datatype": "auto-detect",
        "broker": "129d6e906d9dd052",
        "nl": false,
        "rap": true,
        "rh": 0,
        "inputs": 0,
        "x": 130,
        "y": 340,
        "wires": [
            [
                "e01b9b23d86b8a85"
            ]
        ]
    },
    {
        "id": "a58743c7c8ad6e20",
        "type": "mqtt out",
        "z": "7d3e99c836519d65",
        "name": "",
        "topic": "test",
        "qos": "0",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "129d6e906d9dd052",
        "x": 310,
        "y": 420,
        "wires": []
    },
    {
        "id": "e01b9b23d86b8a85",
        "type": "debug",
        "z": "7d3e99c836519d65",
        "name": "debug 1",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 320,
        "y": 340,
        "wires": []
    },
    {
        "id": "0d97a5c8ab4da729",
        "type": "inject",
        "z": "7d3e99c836519d65",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 150,
        "y": 420,
        "wires": [
            [
                "a58743c7c8ad6e20"
            ]
        ]
    },
    {
        "id": "4b41ef5c5204a097",
        "type": "rpi-gpio out",
        "z": "7d3e99c836519d65",
        "name": "",
        "pin": "21",
        "set": "",
        "level": "0",
        "freq": "",
        "out": "out",
        "bcm": true,
        "x": 320,
        "y": 520,
        "wires": []
    },
    {
        "id": "9c34faceb322983d",
        "type": "inject",
        "z": "7d3e99c836519d65",
        "name": "",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "true",
        "payloadType": "bool",
        "x": 130,
        "y": 500,
        "wires": [
            [
                "4b41ef5c5204a097"
            ]
        ]
    },
    {
        "id": "f3a935eda4afd647",
        "type": "inject",
        "z": "7d3e99c836519d65",
        "name": "",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "false",
        "payloadType": "bool",
        "x": 130,
        "y": 560,
        "wires": [
            [
                "4b41ef5c5204a097"
            ]
        ]
    },
    {
        "id": "fbe1135d.bfce5",
        "type": "inject",
        "z": "7d3e99c836519d65",
        "name": "Red",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "payload": "Red",
        "payloadType": "str",
        "x": 1030,
        "y": 400,
        "wires": [
            [
                "e953cecc.465ec"
            ]
        ]
    },
    {
        "id": "17e081ef.3a17de",
        "type": "inject",
        "z": "7d3e99c836519d65",
        "name": "0,0,255,0",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "payload": "0,0,255,00",
        "payloadType": "str",
        "x": 1020,
        "y": 480,
        "wires": [
            [
                "e953cecc.465ec"
            ]
        ]
    },
    {
        "id": "2a0af109.0b7bfe",
        "type": "inject",
        "z": "7d3e99c836519d65",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "payload": "black",
        "payloadType": "str",
        "x": 1030,
        "y": 560,
        "wires": [
            [
                "e953cecc.465ec"
            ]
        ]
    },
    {
        "id": "6f0edc5c.c63b14",
        "type": "inject",
        "z": "7d3e99c836519d65",
        "name": "0,255,0,0",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "payload": "0,255,0,0",
        "payloadType": "str",
        "x": 1020,
        "y": 440,
        "wires": [
            [
                "e953cecc.465ec"
            ]
        ]
    },
    {
        "id": "dcebc2d3.db8a4",
        "type": "inject",
        "z": "7d3e99c836519d65",
        "name": "0,0,00,255",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "payload": "0,0,0,255",
        "payloadType": "str",
        "x": 1020,
        "y": 520,
        "wires": [
            [
                "e953cecc.465ec"
            ]
        ]
    },
    {
        "id": "99e106f1.fae6d8",
        "type": "inject",
        "z": "7d3e99c836519d65",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "payload": "0,0,0,0",
        "payloadType": "str",
        "x": 1030,
        "y": 600,
        "wires": [
            [
                "e953cecc.465ec"
            ]
        ]
    },
    {
        "id": "df07c5fbcc36e807",
        "type": "inject",
        "z": "7d3e99c836519d65",
        "name": "",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "White",
        "payloadType": "str",
        "x": 1030,
        "y": 360,
        "wires": [
            [
                "e953cecc.465ec"
            ]
        ]
    },
    {
        "id": "b93a663a5c922075",
        "type": "inject",
        "z": "7d3e99c836519d65",
        "name": "",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "true",
        "payloadType": "bool",
        "x": 630,
        "y": 500,
        "wires": [
            [
                "38a7602d47691262"
            ]
        ]
    },
    {
        "id": "38a7602d47691262",
        "type": "function",
        "z": "7d3e99c836519d65",
        "name": "function 5",
        "func": "//ligne 1\nmsg.payload=\"0,0,0,0\"; \nnode.send(msg);\nmsg.payload=\"1,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"2,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"3,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"4,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"5,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"6,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"7,0,0,0\"; \nnode.send(msg);\n\n//ligne 2\nmsg.payload=\"8,255,0,0\"; \nnode.send(msg);\nmsg.payload=\"9,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"10,255,0,0\"; \nnode.send(msg);\nmsg.payload=\"11,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"12,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"13,255,0,0\"; \nnode.send(msg);\nmsg.payload=\"14,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"15,255,0,0\"; \nnode.send(msg);\n\n//ligne 3\nmsg.payload=\"16,255,0,0\"; \nnode.send(msg);\nmsg.payload=\"17,255,0,0\"; \nnode.send(msg);\nmsg.payload=\"18,255,0,0\"; \nnode.send(msg);\nmsg.payload=\"19,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"20,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"21,255,0,0\"; \nnode.send(msg);\nmsg.payload=\"22,255,0,0\"; \nnode.send(msg);\nmsg.payload=\"23,255,0,0\"; \nnode.send(msg);\n\n//ligne 4\nmsg.payload=\"24,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"25,255,0,0\"; \nnode.send(msg);\nmsg.payload=\"26,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"27,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"28,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"29,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"30,255,0,0\"; \nnode.send(msg);\nmsg.payload=\"31,255,255,0\"; \nnode.send(msg);\n\n//ligne 5\nmsg.payload=\"32,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"33,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"34,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"35,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"36,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"37,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"38,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"39,255,255,0\"; \nnode.send(msg);\n\n//ligne 6\nmsg.payload=\"40,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"41,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"42,3,34,76\";  \nnode.send(msg);\nmsg.payload=\"43,3,34,76\";  \nnode.send(msg);\nmsg.payload=\"44,3,34,76\";  \nnode.send(msg);\nmsg.payload=\"45,3,34,76\";  \nnode.send(msg);\nmsg.payload=\"46,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"47,255,255,0\"; \nnode.send(msg);\n\n//ligne 7\nmsg.payload=\"48,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"49,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"50,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"51,253,108,158\"; \nnode.send(msg);\nmsg.payload=\"52,253,108,158\"; \nnode.send(msg);\nmsg.payload=\"53,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"54,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"55,255,255,0\"; \nnode.send(msg);\n\n//ligne 8\nmsg.payload=\"56,0,0,0\"; \nnode.send(msg);\nmsg.payload=\"57,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"58,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"59,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"60,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"61,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"62,255,255,0\"; \nnode.send(msg);\nmsg.payload=\"63,0,0,0\"; \nnode.send(msg);\n\nreturn msg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 820,
        "y": 500,
        "wires": [
            [
                "e953cecc.465ec"
            ]
        ]
    },
    {
        "id": "2e770991911e60eb",
        "type": "exec",
        "z": "7d3e99c836519d65",
        "command": "cat /sys/class/thermal/thermal_zone0/temp",
        "addpay": "",
        "append": "",
        "useSpawn": "false",
        "timer": "",
        "winHide": false,
        "oldrc": false,
        "name": "temp cpu",
        "x": 940,
        "y": 60,
        "wires": [
            [
                "316532888c8c3ead"
            ],
            [],
            []
        ]
    },
    {
        "id": "bd684006345337af",
        "type": "inject",
        "z": "7d3e99c836519d65",
        "name": "temp",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "60",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "true",
        "payloadType": "bool",
        "x": 790,
        "y": 60,
        "wires": [
            [
                "2e770991911e60eb"
            ]
        ]
    },
    {
        "id": "316532888c8c3ead",
        "type": "debug",
        "z": "7d3e99c836519d65",
        "name": "debug 4",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 1160,
        "y": 60,
        "wires": []
    },
    {
        "id": "0a3240297ef278ac",
        "type": "exec",
        "z": "7d3e99c836519d65",
        "command": "sudo shutdown -h now",
        "addpay": "",
        "append": "",
        "useSpawn": "false",
        "timer": "",
        "winHide": false,
        "oldrc": false,
        "name": "",
        "x": 980,
        "y": 140,
        "wires": [
            [
                "540bac65bd8233f7"
            ],
            [],
            []
        ]
    },
    {
        "id": "bcd2a5920769f6ed",
        "type": "inject",
        "z": "7d3e99c836519d65",
        "name": "halt",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "true",
        "payloadType": "bool",
        "x": 790,
        "y": 100,
        "wires": [
            [
                "0a3240297ef278ac"
            ]
        ]
    },
    {
        "id": "540bac65bd8233f7",
        "type": "debug",
        "z": "7d3e99c836519d65",
        "name": "debug 5",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 1160,
        "y": 140,
        "wires": []
    },
    {
        "id": "96a828994c70bb08",
        "type": "exec",
        "z": "7d3e99c836519d65",
        "command": "sudo shutdown -r now",
        "addpay": "",
        "append": "",
        "useSpawn": "false",
        "timer": "",
        "winHide": false,
        "oldrc": false,
        "name": "",
        "x": 980,
        "y": 200,
        "wires": [
            [
                "57a4b4704c1732bf"
            ],
            [],
            []
        ]
    },
    {
        "id": "9b9c580aa00bc427",
        "type": "inject",
        "z": "7d3e99c836519d65",
        "name": "reboot",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "true",
        "payloadType": "bool",
        "x": 790,
        "y": 200,
        "wires": [
            [
                "96a828994c70bb08"
            ]
        ]
    },
    {
        "id": "57a4b4704c1732bf",
        "type": "debug",
        "z": "7d3e99c836519d65",
        "name": "debug 6",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 1160,
        "y": 200,
        "wires": []
    },
    {
        "id": "e953cecc.465ec",
        "type": "rpi-neopixels",
        "z": "7d3e99c836519d65",
        "name": "",
        "gpio": "12",
        "pixels": "24",
        "bgnd": "",
        "fgnd": "",
        "wipe": "2",
        "mode": "pixels",
        "rgb": "rgb",
        "brightness": "100",
        "gamma": true,
        "x": 1270,
        "y": 500,
        "wires": []
    },
    {
        "id": "1b9d722b7dd1408d",
        "type": "inject",
        "z": "7d3e99c836519d65",
        "name": "",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "Blue",
        "payloadType": "str",
        "x": 1030,
        "y": 320,
        "wires": [
            [
                "e953cecc.465ec"
            ]
        ]
    },
    {
        "id": "5495fc007e565c79",
        "type": "function",
        "z": "7d3e99c836519d65",
        "name": "Rainbow Effect",
        "func": "var numberOfLEDs = 24;\n\nfor(i=0; i<255; i++){\n    \n    for(j=0; j<numberOfLEDs; j++){\n        \n        var pos = 0;\n        pos = Math.round(((j*255/numberOfLEDs)+i))&255;\n        \n        if(pos<85){\n            var red = pos*3;\n            var green = 255-pos*3;\n            var blue = 0;\n        }\n        else if(pos < 170){\n            pos -= 85;\n            var red = 255 - pos*3;\n            var green = 0;\n            var blue = pos*3;\n        }\n        else{\n            pos -= 170;\n            var red = 0;\n            var green = pos*3;\n            var blue = 255-pos*3;\n        }\n        var setColor = j+','+ red +','+ green +','+ blue;\n        node.send({payload:setColor});\n    }\n}",
        "outputs": 1,
        "timeout": "",
        "noerr": 9,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 820,
        "y": 420,
        "wires": [
            [
                "e953cecc.465ec"
            ]
        ]
    },
    {
        "id": "e3d2bb449bdbee18",
        "type": "inject",
        "z": "7d3e99c836519d65",
        "name": "",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "true",
        "payloadType": "bool",
        "x": 630,
        "y": 420,
        "wires": [
            [
                "5495fc007e565c79"
            ]
        ]
    },
    {
        "id": "8b848788f4bcbe1a",
        "type": "debug",
        "z": "7d3e99c836519d65",
        "name": "input pin ",
        "active": false,
        "tosidebar": true,
        "console": true,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 530,
        "y": 40,
        "wires": []
    },
    {
        "id": "7e357f0d4bf55e63",
        "type": "function",
        "z": "7d3e99c836519d65",
        "name": "filtre shutdown",
        "func": "if (msg.payload == \"1\" ){\n    return msg;\n}",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 320,
        "y": 100,
        "wires": [
            [
                "8b848788f4bcbe1a",
                "0a3240297ef278ac"
            ]
        ]
    },
    {
        "id": "39d1839abe8ef107",
        "type": "debug",
        "z": "7d3e99c836519d65",
        "name": "debug 10",
        "active": false,
        "tosidebar": true,
        "console": true,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 310,
        "y": 40,
        "wires": []
    },
    {
        "id": "faa8e3adf1ad2384",
        "type": "rpi-gpio in",
        "z": "7d3e99c836519d65",
        "name": "",
        "pin": "25",
        "intype": "tri",
        "debounce": "25",
        "read": false,
        "bcm": true,
        "x": 130,
        "y": 100,
        "wires": [
            [
                "7e357f0d4bf55e63",
                "39d1839abe8ef107"
            ]
        ]
    },
    {
        "id": "432266c83987be5d",
        "type": "rpi-gpio in",
        "z": "7d3e99c836519d65",
        "name": "",
        "pin": "24",
        "intype": "up",
        "debounce": "25",
        "read": true,
        "bcm": true,
        "x": 140,
        "y": 160,
        "wires": [
            [
                "8f39e512ad35ca1a",
                "c470e0e0a66971fd"
            ]
        ]
    },
    {
        "id": "2b4c59ac96abd336",
        "type": "rpi-gpio in",
        "z": "7d3e99c836519d65",
        "name": "",
        "pin": "23",
        "intype": "up",
        "debounce": "25",
        "read": true,
        "bcm": true,
        "x": 140,
        "y": 220,
        "wires": [
            [
                "29a6860b2ea2e844",
                "c470e0e0a66971fd"
            ]
        ]
    },
    {
        "id": "558817f795166dd9",
        "type": "debug",
        "z": "7d3e99c836519d65",
        "name": "batt_char",
        "active": false,
        "tosidebar": true,
        "console": true,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 530,
        "y": 160,
        "wires": []
    },
    {
        "id": "4039f102521fb729",
        "type": "debug",
        "z": "7d3e99c836519d65",
        "name": "batt_full",
        "active": false,
        "tosidebar": true,
        "console": true,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 530,
        "y": 220,
        "wires": []
    },
    {
        "id": "8f39e512ad35ca1a",
        "type": "InvertUltimate",
        "z": "7d3e99c836519d65",
        "name": "Invert",
        "payloadPropName": "payload",
        "x": 310,
        "y": 160,
        "wires": [
            [
                "558817f795166dd9"
            ]
        ]
    },
    {
        "id": "c470e0e0a66971fd",
        "type": "BooleanLogic",
        "z": "7d3e99c836519d65",
        "name": "",
        "operation": "AND",
        "inputCount": 2,
        "topic": "result",
        "x": 320,
        "y": 280,
        "wires": [
            [
                "4cde89108d136fa9"
            ]
        ]
    },
    {
        "id": "4cde89108d136fa9",
        "type": "debug",
        "z": "7d3e99c836519d65",
        "name": "no_power",
        "active": false,
        "tosidebar": true,
        "console": true,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 530,
        "y": 280,
        "wires": []
    },
    {
        "id": "29a6860b2ea2e844",
        "type": "InvertUltimate",
        "z": "7d3e99c836519d65",
        "name": "Invert",
        "payloadPropName": "payload",
        "x": 310,
        "y": 220,
        "wires": [
            [
                "4039f102521fb729"
            ]
        ]
    },
    {
        "id": "129d6e906d9dd052",
        "type": "mqtt-broker",
        "name": "",
        "broker": "localhost",
        "port": "1883",
        "clientid": "",
        "autoConnect": true,
        "usetls": false,
        "protocolVersion": "4",
        "keepalive": "60",
        "cleansession": true,
        "autoUnsubscribe": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthRetain": "false",
        "birthPayload": "",
        "birthMsg": {},
        "closeTopic": "",
        "closeQos": "0",
        "closeRetain": "false",
        "closePayload": "",
        "closeMsg": {},
        "willTopic": "",
        "willQos": "0",
        "willRetain": "false",
        "willPayload": "",
        "willMsg": {},
        "userProps": "",
        "sessionExpiry": ""
    }
]

le json si vous voulez le copier et l’importer dans votre nodered

reste un point dans l’immédiat
vraiment la swap est très petite
et là on a une emmc donc on peut s’amuser un peu et augmenter ça sans avoir peur de niq*er la carte sd
https://siebert.ovh/gnu_linux:raspberry:augmenter_la_taille_du_swap_sur_le_raspberry_pi

Par défaut sur Raspbian, la taille du swap est de 100 Mo. La ram étant assez limité sur le Raspberry pi (1 Go), 100 Mo peut ne pas suffire en swap. Avant d’augmenter le swap, je vous conseille d’utiliser un ma carte EMMC au lieu de la carte SD, ces cartes ayant un nombre de cycle lecture/écriture assez limité comparé à une EMMC.

Commencez par désactiver le swap :

sudo dphys-swapfile swapoff

Pour modifier la taille du swap, qui se trouve dans /var/swap, ouvrez le fichier /etc/dphys-swapfile avec la commande

sudo nano /etc/dphys-swapfile

et modifiez la ligne “CONF_SWAPSIZE=100” en mettant la taille que vous souhaitez (la taille est exprimée en Mo). Pour mon cas 2000, juste comme ça au doigt mouillé.

Une fois le fichier modifié, il va falloir créer un nouveau fichier de swap

sudo dphys-swapfile setup

Il ne reste plus qu’à réactiver le swap :

sudo dphys-swapfile swapon


Je redessine la carte je la commande et on test la suite après

5 « J'aime »

Bon suite de l’histoire,
j’ai eu quelques sueur froide car l’usb s’aluume et démarrage et se ré-eteind puis se rallume… et se stabilise une fois que l’OS est démarré.
il a donc fallu temporisé de manière réarmable le power bank… donc mon schéma est a compléter…
il va faloir faire pousser des composants version aérienne sur le circuit mince


J’ai reçu mes carte proto enfin
on commence les testes, on règle les tension des booster dc/dc
on test d’abord l’usb host => ok
les 4 ports séries => OKAY


avec un coordinateur zigbee type pi hat (oui le format des broche permettent l’ajout des pi hat série)

Oulala pinaize, ça marche
c’est beau ça
on teste le power bank aye
bon une glutte à faire, j’ai mis de la sueur pour trouver la bonne valeur de retard d’extinction réarmable a trouver

un bst82 avec une 100k pour polariser la grille, puis un irlml6402 commandé par une 100k en parallàle avec un 100µf et on a environ 10 secondes de delay ouf
on intègre




je passe toute les étapes de tests et modif… sinon je fais un roman

J’aime le résultat
j’ai peur de phénomène de couplage des antennes même si elles ne sont pas sur les mêmes fréquences
la façade avant n’est pas encore faite et pour l’instant je n’ai mis en service que le hat enocean

à bientôt

5 « J'aime »


2 « J'aime »


gestion de la rampe de led sous node red

gestion des alime et extinction du rpi si plus de secteur et batterie trop faible ou si la température est supérieur à 77°C

4 « J'aime »

Salut j’aime beaucoup ce que tu as fais, mais j’ai une demande pour toi.
On peut passer en pv si tu veux
bref
j’ai un NUC, aujourd’hui on en trouve d’occas pour 60€, et donc je me suis rabattu là dessus pour le rapport prix preformance d’un pi.
Je vais d’abord commencer par étaler de la creme.
je voudrais savoir si il est possible de modifier ta carte multi port série pour un nuc???
J’y vois plusieurs avantage;
→ utiliser des pi hat moi cher que les dongle usb
→ ne plus avoir les usb tournant au redemarrage du pc donc ça évite de ce casser la tête à attribuer les port
→ avec une alim externe on ne tire pas sur l’alim du pc
→ on met ce qu’on veut en module radio avec une empreinte standart
->dans une belle boite avec des antennes dans chaque coin pour les éloigner un peu plus

Vraiment je serais client d’une telle solution

Merci d’avance de ta prochaine réponse je suis sérieux

2 « J'aime »

interessant
oui bien sûre
dans le rpi elles apparaissent comme ça
image
ACM0…
donc tu as réaison au moin les port série sont attribué physiquement donc fixe
par contre moi aussi j’ai une demande
je peux t’en envoyer une gratuit (proto modifié) si tu veux bien m’aider
j’en ai modifié une pour brancher sur mon pc hier soir



j’ai redirigé le ch340 sur le host usb et le port usb C sur le host
se qui donne 5 port série fonctionnel
un avec le ch340 et 4 avec le ch344

il se trouve qu’on en a parlé hier avec @krosand
et bien entendu ça fonctionne aussi sur un pi

j’en viens au fait
apparement sur la datasheet du ch344
image

on pourrait utiliser les broche dtr cts dcd… enfin les broche supplémentaire des ports série comme des gpio se qui permettrai d’utiliser un NUC comme un RPI ou rajouter des GPIO à un RPI
bref je suis dispo pour en causer car vraiment linux c’est pas ma partie de plaisir, je rame

image
exemple le DTR0 s’appel aussi GPIO8
comment jouer avec???
a tout entendeur dans la communautée, merci de votre aide

3 « J'aime »

ça marche je vais d’abord éplucher des info sur le web ce soir et on se capte :wink:
trop content

2 « J'aime »

Personnellement, j’emploie également un NUC monté sur un rail DIN, et à mon avis, c’est une solution parfaite, notamment grâce à ses ports GPIO qui offrent des entrées/sorties. J’ai vraiment hâte de recevoir ta carte pour la tester ! :pray:

3 « J'aime »

bon j’en ai dessiné une nouvelle verion pour les NUCs
image
en écortant un peu plus les ports




j’ai pu tester mes hat enocean, zigbee et lora, sans soucis
impeccable

1 « J'aime »

Ton convertisseur a brillamment répondu à un besoin que j’avais depuis longtemps, à savoir faire fonctionner mes modules Raspberry Pi sur un NUC. Avec le nombre limité de ports USB dont je disposais, ta carte m’a permis de connecter l’ensemble de mes équipements.

Cela me permet de me séparer de mon Sonoff, car j’ai désormais une puce similaire connectée sur ttyACM2. J’ai également remarqué ton module Enocean ; est-il disponible à la vente ?

Tout cela est opérationnel avec Jeedom et Home Assistant.

le module zigbee sur ttyACM2

Zigbee2MQTT:info  2023-12-12 11:57:44: Starting Zigbee2MQTT version 1.34.0 (commit #unknown)
Zigbee2MQTT:info  2023-12-12 11:57:44: Starting zigbee-herdsman (0.25.0)
Zigbee2MQTT:info  2023-12-12 11:57:47: zigbee-herdsman started (resumed)
Zigbee2MQTT:info  2023-12-12 11:57:47: Coordinator firmware version: '{"meta":{"maintrel":1,"majorrel":2,"minorrel":7,"product":1,"revision":20230507,"transportrev":2},"type":"zStack3x0"}'

Il serait avantageux d’avoir une carte conçue pour s’adapter à un boîtier rail DIN. J’utilise aussi un Raspberry Pi 4 monté sur un rail DIN.

Je réfléchis à aller plus loin en testant le protocole Modbus et envisage de le connecter sur ttyACM0, c’est possible ?

modbus

Merci beaucoup pour cette carte, je la trouve également très adaptée pour une utilisation dans le secteur industriel. Excellent travail !

2 « J'aime »

J’ai flasher aisément le coordinateur Zigbee Sonoff ainsi que ton CC2652P directement depuis ta carte en utilisant les commandes suivantes :

l’outils JelmerT

sudo apt update && sudo apt-get install python3-pip
wget -O cc2538-bsl.zip https://codeload.github.com/JelmerT/cc2538-bsl/zip/master && unzip cc2538-bsl.zip
sudo pip3 install pyserial intelhex

j’ai connecté le module sur ttyACM3. il est nécessaire de maintenir enfoncé le bouton de bootload tout en connectant la carte simultanément, et de rester appuyé pendant 10 secondes, à l’instar de la procédure pour la Sonoff.

Il est important de télécharger le firmware approprié pour votre module depuis :

cd cc2538-bsl-master
sudo python cc2538-bsl.py -p /dev/ttyACM3 -evw CC1352P2_CC2652P_launchpad_coordinator_20230507.hex

pareil pour le sonoff que j’ai branché sur ttyUSB1, même principe !

Zigbee2MQTT:info  2023-12-10 15:27:01: Coordinator firmware version: '{"meta":{"maintrel":1,"majorrel":2,"minorrel":7,"product":1,"revision":20230507,"transportrev":2},"type":"zStack3x0"}'

le module est flasher y a rien d’autre à faire !

2 « J'aime »

Nice
Impeccable
merci pour le tuto de mise à jour du coordinateur ça pourrait interesser @MrGreen et les utilisateur de Zigbeelinker et jeezigbee vu que c’est la puce officiel pour Z2M sur lesquels sont basé ces 2 plugins
:wink:
concernant le fait de la mettre sur rail din, bonne idée mais il va faloir tout reprendre le schéma à cause des dimension, un bon gros travail en fait mais l’idée est très interessante en effet
comme pour le rs485 pour faire du modbus
euh il y a beaucoup de questions là
pour l’adaptateur de zigbee au fformat pi hat oui je peux en faire comme les emmc j’ai une bonne dizaine de circuit d’avance.


il faut que je les assemble et les flash comme pour la neo se sont les même

PAR CONTRE UTILISE UNE ANTENNE STP sur le module zigbee va pas flinguer ta carte elle est pas sensé fonctionner sans ATTENTION surtout qu’elle sort 5dbm

je crois avoir répondu si j’ai oublié qqc n’hesite pas

2 « J'aime »

ah oui j’oubliais
ou va pouvoir passer sur les bon driver car apparement dans la datasheet


avec les bons driver
les pattes dcd rts cts dtr et le dsr dans la petite bulle
pourraient être pilotable comme des gpio d’un raspberry
ça pourrait donner des idées au makers :wink:
et en plus ça premettrai de faire un module modbus

2 « J'aime »

@krosand
regarde cette page

pour ma part certaines choses me dépassent comme le point 2
bref si tu veux bien qu’on prenne le temps d’essayer?

1 « J'aime »
  1. Open « Terminal »
  2. Switch to « driver » directory
  3. Compile the driver using « make », you will see the module « ch343.ko » if successful
  4. Type « sudo make load » or « sudo insmod ch343.ko » to load the driver dynamically
  5. Type « sudo make unload » or « sudo rmmod ch343.ko » to unload the driver
  6. Type « sudo make install » to make the driver work permanently
  7. Type « sudo make uninstall » to remove the driver
  8. You can refer to the link below to acquire uart application, you can use gcc or Cross-compile with cross-gcc GitHub - WCHSoftGroup/tty_uart: linux tty uart application

puis un gg trad
Les puces USB vers UART(s) ch342/ch343/ch344/ch347/ch9101/ch9102/ch9103/ch9104 sont entièrement conformes à la norme Communications Device Class (CDC), elles fonctionneront avec un pilote CDC-ACM standard (CDC - Abstract Control Modèle). Les systèmes d’exploitation Linux fournissent un pilote CDC-ACM par défaut qui peut être utilisé avec ces périphériques USB UART. Sous Linux, ce nom de fichier de pilote est cdc-acm.

Le pilote CDC-ACM a des capacités limitées pour contrôler des périphériques spécifiques. Ce pilote générique n’a aucune connaissance des protocoles de périphérique spécifiques. Pour cette raison, les fabricants de périphériques peuvent créer un pilote alternatif ou personnalisé capable d’accéder aux ensembles de fonctions spécifiques au périphérique, tels que le contrôle de flux matériel ou les fonctions GPIO.

Si vous utilisez ce pilote VCP, veuillez vérifier que le pilote CDC-ACM n’a pas été installé pour les périphériques USB UART mentionnés ci-dessus. Vous pouvez utiliser la commande « ls /dev/ttyACM* » pour confirmer que, pour supprimer le pilote CDC-ACM, utilisez la commande « rmmod cdc-acm ».

Ce pilote prend en charge la puce USB vers un port série unique ch343/ch347/ch9101/ch9102, la puce USB vers deux ports série ch342/ch347/ch9103, la puce USB vers quatre ports série ch344, ch9104, etc.

1 « J'aime »

Salut j’avais perdu mes identifiant du forum, dsl @Kazymir
J’ai reçu ta carte hier, j’ai pu tester,
Super j’adore
enfin quelque chose sur un nuc avec le pi hat qui sont moins cher que les transceiver radio en usb, et là au moins je peu mettre le nuc dans le placard et déporter les antennes.
Bon dans un tuperware mais comme je l’ai mis sur un meuble en hauter et non visible ça a améliorer les niveau de signal reçu car en plus on utilise des « vrai antennes » et pas des merdouille sur pcb.
bref j’adore
bon je vais pouvoir mis mettre aussi je vais me refaire un system propre pour voir ces histoire de drivers

1 « J'aime »

@krosand
merci pour la méthode de mis à jour impeccable

bon je test les port avec
image
on peut le télécharger ici

désolé @krosand c’est sous windows


on va tester les sorties rts et dtron commence par rts
image

ok niveau de tension de sortie 3v, donc on est au format ttl 3.3v
et maintenant la sortie DTR
image
vert ok on est bon les 2 sortie sont ok
on va tester l’entrée ctsen strappant à la masse
image
image
impeccable
et les autre avec un fil dupont
image
ah oui en effet je vois j’ai strappé dcd et le dsr a changé d’état, forcément tu as strappé avec R42
image
et ou est « RI »? ring???

Je reprends ton schéma
à oui pas cablé, mais fonctionnel
bon on truc sous windows impeccable on va passer sous linux
Mais petite remarque.
Peux-tu faire sortir la pin ring? et détacher DCD et DSR? pour faire un connecteur un peu plus complet ?
image
Sous cette forme ça n’empecherai pas les pi HAT et on aurai accès au port série complet!!!
en tout cas super et merci pour la carte

2 « J'aime »