Une liste électronique mobile

Une liste électronique mobile

Est-ce que vous vous rappelez de la Liste de courses 2.0, ce petit scanner de codes-barres couplé à une imprimante à reçus, qui permettait d'établir sa liste de course en scannant les produits à racheter et de l'imprimer juste avant de partir faire les courses ? Figurez-vous que 10 ans après, ce système est toujours utilisé par votre serviteur et apporte pleine satisfaction, enfin presque...



Si la partie scanner est toujours utilisée, la partie imprimante, elle, a finalement été abandonnée: comme tous les gadgets rechargeables, elle était régulièrement à court d'accus au moment où on en avait le plus besoin. D'où la nécessité de recopier la liste de course sur un bout de papier juste avant de partir faire les courses, ce qui s'est rapidement transformé en habitude.

Mais maintenant que Yoctopuce a le Yocto-Display-ePaper-C dans son assortiment, est-ce qu'on ne pourrait pas remplacer le bout papier par un écran ePaper et tirant parti du fait qu'un écran ePaper n'a pas besoin d'électricité pour maintenir son image?

La partie mécanique

L'idée est de fabriquer un dispositif facilement transportable, de la taille d'un (tout) petit smartphone, comprenant l'écran et le Yocto-Display-ePaper-C. Lorsqu'il n'est pas utilisé, cet écran est connecté à une base qui contient un YoctoHub-Ethernet chargé de mettre à jour l'affichage au fur et à mesure que des choses sont ajoutées à la liste de courses.

L'écran

L'écran est tout simplement basé sur le produit ePaper-3.7-BW qui est constitué d'un écran ePaper E2370KS0C1 collé sur une plaque de verre acrylique au dos de laquelle on peut visser un Yocto-Display-ePaper-C. Le tout est habillé d'une coque en plastique imprimé. Au dos de cette coque, se trouve une queue d'aronde qui permet de positionner avec précision le dispositif sur sa base. Le tout est maintenu ensemble avec des vis et des inserts filetés

Le design de l'écran
Le design de l'écran

Côté face  Côté pileLe même, en vrai


La base

La base est une simple boîte en plastique imprimé qui contient un YoctoHub-Ethernet alimenté en PoE, avec sur le couvercle, une glissière correspondant au dos de l'écran. Le petit truc qui permet à tout ça de fonctionner ensemble sans effort est une pièce qui n'est pas fabriquée par Yoctopuce mais par Adafruit Industries. Il s'agit un simple connecteur USB type-C mâle soudé sur un breakout board. Le dos de l'écran et la base sont conçus pour que le connecteur du Yocto-Display-ePaper-C et celui du breakout board s'alignent et s'enfichent l'un dans l'autre lorsqu'on glisse l'écran sur la base. Le breakout board et le YoctoHub sont connectés par un câble 1.27-1.27-11 dont on a coupé puis soudé une extrémité sur les contacts du breakout board.

Le design de la base
Le design de la base


L'écran se glisse sur la base  Prête à l'emploi
La même, en vrai



Si cela vous intéresse, vous trouverez les fichiers step de l'écran et du boitier dans cette cette archive ZIP.

La partie logicielle

La programmation est assez triviale: La liste de courses fonctionne avec des callback HTTP. Les YoctoHubs du scanner et de l'imprimante se contentent d'appeler régulièrement des scripts PHP qui se trouvent sur un serveur web et le résultat de ces scripts pilote les divers modules connectés aux YoctoHubs. La liste de courses se trouve elle aussi sur le serveur sous la forme d'un fichier .ini. Il a suffi d'écrire un petit script PHP supplémentaire qui lit ce fichier .ini et envoie les commandes nécessaires pour afficher le contenu de la liste sur l'écran, et ensuite de configurer le YoctoHub-Ethernet de la base pour qu'il appelle ce script à intervalles réguliers.

$AvailableFonts = [["Atma12.yfm",12],["Atma16.yfm",16],["Atma24.yfm",24]];
$errmsg="";
if (yRegisterHub("callback", $errmsg) != YAPI_SUCCESS)
  { die ("API init failed: $errmsg"); }

$display = yFirstDisplay();
if (is_null($display))  { die ("No display found");}

// loads the list
if (file_exists("data/$feed.ini"))
 {$list=parse_ini_file ("data/$feed.ini",true);}
     else
 {die ("No such feed ($feed.ini).");}
uasort($list,function($a,$b){return strcasecmp($a['desc'],$b['desc']);});

// init display
$l0 = $display->get_displayLayer(0);
$w  = $display->get_displayWidth();
$h  = $display->get_displayHeight();
$y  = 3;
$x  = 5;
$items = [];

// check for list items  we need to buy
foreach ($list as $ean=>$data)
  { if ($data['mustbuy']>0) $items[] = $data['desc'];}

// find out the best font depending on items count
$fontIndex = sizeof($AvailableFonts)-1;
while (($fontIndex>0) && (sizeof($items) * $AvailableFonts[$fontIndex][1]>$h))
 { $fontIndex--; }

$l0->selectFont($AvailableFonts[$fontIndex][0]);
$lineHeight =  $AvailableFonts[$fontIndex][1];

// start display refresh
$display->postponeRefresh(1000);
$l0->clear();
if (sizeof($items)>0)
  { for ($i=0;$i<sizeof($items);$i++)
      { $l0->drawText($x,$y,   Y_ALIGN_TOP_LEFT,$items[$i] );
        $y += $lineHeight ;
        if ($y>$h-$lineHeight) {$y=3;$x=$w>>1;} // starts a second column
      }
   }
else
   { $l0->drawText($w>>1,$h>>1,Y_ALIGN_CENTER,"NOTHING TO BUY" ); }
$display->triggerRefresh();


On a rajouté quelques subtilités comme une jolie police de caractères qui imite une écriture manuscrite disponible en trois tailles, ainsi l'écran utilise des caractères plus ou moins gros en fonction de la quantité d'objets à afficher, mais globalement ce script ne fait rien d'extraordinaire.

Conclusion

Ce système de liste électronique mobile pourrait faire penser à un gadget rigolo quoiqu'un peu redondant, mais en fait, c'est assez redoutable d'efficacité: le même système est déjà utilisé en interne chez Yoctopuce pour construire des listes de produits, avec leur emplacement, à aller chercher dans le stock en fonction des commandes à préparer.

On imagine que certains se disent qu'ils feraient tout aussi bien avec un bête smartphone et une app téléchargée gratuitement. Peut-être, mais notre liste électronique mobile n'a pas besoin de piles, si on casse ou perd l'écran, on peut facilement en fabriquer un autre à peu de frais, et on ne court pas le risque de voir le contenu de ses listes communiqué à des tiers sans notre consentement.

Pour finir sur une note un peu légère, on nous a fait remarquer qu'on ne pouvait pas rayer les éléments de la liste au fur et à mesure qu'on les a traités, comme sur une vraie liste papier. En fait, si, on peut: il suffit d'utiliser un feutre effaçable, on a essayé, ça marche :-)

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.