Recipes - Tools - Community and Events - References - Inspiration - To do

Unlisted: CrowVision, RoenDi (cf related issues), PaPiRus (see Eink), PIcade (see RPi), Petoi Bittle (unfortunately stuck in a bad state), ANAVI Fume Extractor, ANAVI Macro Pad 8, Lite3DP 3D Printer, Tomu, Fomy, Pinecil (with IronOS)




IDE setup

To explore


#define BLINK_GPIO_1 4                                 // GPIO 4 (3rd pin)

void app_main(void)
    gpio_set_direction(BLINK_GPIO_1, GPIO_MODE_INPUT); // define as input
    gpio_pulldown_en(BLINK_GPIO_1);                    //pull down mode, here 100K Ohm
    while (1)
        printf("%d\n", gpio_get_level(BLINK_GPIO_1));  // print GPIO status for monitor
        vTaskDelay(1000 / portTICK_PERIOD_MS);         // pause 1s



  • chip at the heart of the ESP32-C6-DevKitC-1 devboard

Intersection with XR


Exercise from PCB design with KiCad - updated for KiCad 7

Whadda kits

See for ways to interact with the community



Gateway Things (WebThingsIO)

Replaced by Home Assistant (see below in RPi section) due to better support and existing API endpoints.

Formelly Mozilla Gateway Things

VR + Home Automation + Creativity for Mozilla Hubs Creator Meetup


  • IoT on HTC Vive for in-VR experiment environment modification
  • wifi = micropythoN
  • webrelp = python


  • NFC
    • e.g. applying CognitiveEnvironments on phone and appliances (laptop, domotic and related appliances on current location)
  • "physical" bitcoin wallet using RFID
  • random music
    • needs
      • continuous on the go music stream aiming toward a personal auditive aesthetic
    • solutions
      • multiple tracks
      • random generation
      • decide what a sample is
      • output sound (DSP?)
    • limits
      • required time to reach quality
    • suggestions
      • share result for live social interactions (Thomas)
  • health
    • needs
      • know when to take a pill (and when not to)
    • solutions
      • input pill X, Y, ... taken at timestamp Tx, Ty, ...
      • curves of upper limit and down limit
      • output visual and/or vibration as warning signal
    • limits
      • trust in the tool
    • suggestions
      • really adapted design
  • quantitative life
    • needs
      • be able to record quickly and in a very private way (nobody else has to know an event has been recorded) a non-predefined series of event
    • solutions
      • register button pressed with timestamp
      • output date
    • limits
      • memorization of the association of event/button required
    • suggestions
      • take a picture/scan of your own hand to really have the ideal shape
      • replace button with EEG/fMRI/...
      • ideas of applications
        • smiles, X calories, ideas, feelings, steps, learn something, healthy behavior, ...

Raspberry Pi

WebXR AP on RPi0

If you rely on the image made for this project (620Mb) an open metaverse WiFi should span. Connect to that new WiFi then to and see each other. If you want to add your own customizations connect using ssh fabien@ and password metaverse.

Process to setup environment

  1. rpi-imager to burn the 32bits image
    1. setup WiFi with ssh access via the expert option
  2. ssh in to install NodeJS and all dependencies
  3. setup AP
    1. in /etc/hostapd/hostapd.conf use wpa=0 and remove what's after to make an open AP
    2. note that if you have a device with 2 interfaces, e.g desktop with Ethernet and WiFi, you can connect to the unbridged AP but still have Internet
      1. the AP won't though so commands like apt install or npm install will fail
  4. for single person XR follow
  5. for social XR follow
    1. note for easier setup

Process to generate image, useful to restore the state and make more copies.

  1. identify source microSD, replacing XXX with the right device from lsblk
  2. sudo dd if=/dev/sdXXX of=pi0.img bs=32M && sudo pi0.img
    1. from
    2. This is a fairly long process, e.g 8min on a 32Gb microSD.
  3. Optionally the resulting img can be compressed via xz (which supports multithreading, e.g xz -T9 pi0.img) which here went from ~3Gb to 0.6Gb
    1. fairly long process, e.g 8min for a 3Gb file using 9 cores.
  4. copy to another microSD dd if=pi0.img of=/dev/sdXXX bs=32M conv=fsync
    1. can be done via rpi-imager also, a GUI and thus more convenient for people unfamiliar with the CLI. It works also with the compressed image.
  5. finally boot on it

All this has been simplified as a regen bash script that uploads the resulting image back here.

To inspect the resulting image uncompress it then use partx -v -a pi0.img to make loops, e.g /dev/loop16, mount /dev/loop16p2 virtualimg then after unmount virtualimging them you can remove with partx -d /dev/loop16 again then losetup -d /dev/loop16. See for details.

Small improvements

  • $(which node) or /usr/local/bin/node is required
  • setcap 'cap_net_bind_service=+ep' /usr/local/bin/node to bind on port 443
  • export PORT=443 before starting ./server/easyrtc-server.js
  • sudo vi /etc/motd allows to put a bit of documentation as a welcome message
  • to make a smaller image remove
    • ~/.npm
    • unused locales via e.g localepurge
  • if you copy over on another larger microSD use resize2fs after using a partition manager to expand the partition


Home assistant

Process to get a device working without proper support :

  1. pair it
  2. go in /developer-tools/event and listening to * all events
  3. active said device, e.g press on button
  4. once event cought, stop listening and refine, e.g listen to zha_event
  5. define a new automation in /config/automation/dashboard and edit it in YAML
  6. refine trigger thanks to event_data
  - platform: event
    event_type: zha_event
      device_ieee: 00:11:22:33:44:55:66:77
      command: “off”

Haxophone (hat)



Add also conferences by MIT professor and Roomba CTO Rodney Brooks

Brain-Computer Interface (BCI)

Field-Programmable Gate Array (FPGA)


Community and Events



  • ...

To do