MicroPython WebREPL on the Open Hardware Summit badge

The 2018 Open Hardware Summit badge runs MicroPython firmware which allows for an interactive programming experience known as the REPL:

Getting a MicroPython REPL prompt

REPL stands for Read Evaluate Print Loop, and is the name given to the interactive MicroPython prompt that you can access on the ESP8266. Using the REPL is by far the easiest way to test out your code and run commands.

There is an USB-to-serial adapter board which be used to access the REPL on the badge via the serial port.  However, a simpler option is to use the WebREPL:

WebREPL – a prompt over WiFi

WebREPL allows you to use the Python prompt over WiFi, connecting through a browser. The latest versions of Firefox and Chrome are supported.

For your convenience, WebREPL client is hosted at http://micropython.org/webrepl . Alternatively, you can install it locally from the the GitHub repository https://github.com/micropython/webrepl

Before connecting to WebREPL, you should set a password and enable it via a normal serial connection. Initial versions of MicroPython for ESP8266 came with WebREPL automatically enabled on the boot and with the ability to set a password via WiFi on the first connection, but as WebREPL was becoming more widely known and popular, the initial setup has switched to a wired connection for improved security:

import webrepl_setup

Follow the on-screen instructions and prompts. To make any changes active, you will need to reboot your device.

The MicroPython firmware for the badge has been updated to add WebREPL in the list of available apps.

You can order this USB to serial adapter board for the badge and then follow the instructions to build and flash the new firmware.  The WebREPL option will turn on WiFi and put the badge into AP mode.  Connect to it from your device, such as a laptop, and then connect to the badge using the WebREPL browser-based client.

Resources:

MicroPython WebREPL on the Open Hardware Summit badge

OHS18 badge: accelerometer demo, adapter board, Tindie listing

Updates for the 2018 Open Hardware Summit badge project:

MicroPython demo app for the Accelerometer

Want to use the KX122-1037 Accelerometer (datasheet) on the 2018 Open Hardware Summit badge?

USB-to-Serial adapter board

This adapter board to connects a USB-to-serial cable to the 2018 Open Hardware Summit badge.

Extra badges being sold on Tindie

The extra badges from the Summit are being sold here on Tindie as a fundraiser for the Ada Lovelace Fellowship which provides travel assistance to the Open Hardware Summit. All sales revenue will be 100% donated to the Open Source Hardware Association (OSHWA) for this purpose.

OHS18 badge: accelerometer demo, adapter board, Tindie listing

Open Hardware Summit badge: Magic 8-Ball app

Thanks to @Steve Pomeroy for creating this MicroPython demo app for the Open Hardware Summit badge:

ohs18apps/magic8ball.py

# created by Steve Pomeroy https://hackaday.io/xxv
# modified by Drew Fustini to run once and exit
#
# blog post:
# http://blog.oshpark.com/2018/10/04/open-hardware-summit-badge-magic-8-ball-app/
#
# photo gallery:
# https://photos.app.goo.gl/f1y8PSHfYAaa4xTu7
#
# transfer to Open Hardware Summit badge using FTP:
# https://oshwabadge2018.github.io/docs.html#uploading-over-ftp

import gxgde0213b1
import font16
import font12
from machine import I2C, Pin, TouchPad
import struct
import time
import urandom
from ohsbadge import epd
from ohsbadge import fb

class TouchButton(object):
   def __init__(self, pin, on_pressed, threshold=400, debounce_ms=50):
       self._touchpad = machine.TouchPad(pin)
       self._on_pressed = on_pressed
       self._threshold = threshold
       self._debounce_ms = debounce_ms
       self._down_ms = None
       self._pressed = False

   def read(self):
       if self._touchpad.read()  self._debounce_ms:
                       self._on_pressed()
                       self._pressed = True
       else:
           self._pressed = False
           self._down_ms = None

# from Magic 8-Ball app by Steve Pomeroy https://hackaday.io/xxv
# github.com/oshwabadge2018/ohs18apps/blob/master/magic8ball.py
class MagicBall():
   def clear_screen():
       epd.initPart()
       epd.clear_frame(fb)
       epd.display_frame(fb)

   def show_message(message):
       epd.init()
       epd.clear_frame(fb)
       epd.display_string_at(fb, 0, 52, message, font16, gxgde0213b1.COLORED)
       epd.display_frame(fb)

   def read_accel(i2c):
       i2c.writeto_mem(30, 0x18, b'\x80')
       x = struct.unpack("h", i2c.readfrom_mem(30, 0x6, 2))
       y = struct.unpack("h", i2c.readfrom_mem(30, 0x8, 2))
       z = struct.unpack("h", i2c.readfrom_mem(30, 0xA, 2))
       return (x[0], y[0], z[0])

   def get_orientation(i2c):
       new_orientation = None
       pos = MagicBall.read_accel(i2c)

       if pos[2] > 13000:
           new_orientation = "upright"
       elif pos[2] < -13000:
           new_orientation = "prone"

       return new_orientation

   def main(f):
           phrases = ["It is certain.", "It is decidedly so.", "Without a doubt.", "Yes - definitely.", "You may rely on it.", "As I see it, yes.", "Most likely.", "Outlook good.", "Yes.", "Signs point to yes.", "Reply hazy, try again", "Ask again later.", "Better not tell you now.", "Cannot predict now.", "Concentrate and ask again.", "Don't count on it.", "My reply is no.", "My sources say no.", "Outlook not so good.", "Very doubtful."]
           i2c = machine.I2C(scl=Pin(22), sda=Pin(21))
           epd.init()
           epd.set_rotate(gxgde0213b1.ROTATE_270)
           epd.clear_frame(fb)
           epd.display_frame(fb)
           prev_orientation = None

           keep_on = [True]

           def exit_loop():
               keep_on[0] = False

           exit_button = TouchButton(Pin(32), exit_loop)

           while keep_on[0]:
               exit_button.read()
               orientation = MagicBall.get_orientation(i2c)

               if orientation and orientation != prev_orientation:
                   if orientation == 'upright':
                       MagicBall.show_message(urandom.choice(phrases))
                   elif orientation == 'prone':
                       MagicBall.clear_screen()
               prev_orientation = orientation

ball = MagicBall()
ball.main()

This Python file can be transferred to Open Hardware Summit badge using the FTP server built into the MicroPython firmware.

Resources:

Open Hardware Summit badge: Magic 8-Ball app

Twenty Projects That Just Won the Human Computer Interface Challenge

The greatest hardware competition on the planet is going on right now. The Hackaday Prize is the Oscars of Open Hardware. It’s the Nobel Prize of building a thing. It’s the Fields Medal of firmware development, and simply making it to the finals grants you a knighthood in the upper echelon of hardware developers.

via Twenty Projects That Just Won the Human Computer Interface Challenge — Hackaday

Quote

PewPew: Python-based micro game console

From Radomir Dopieralski (ꝺeshipu) on Hackaday.io:

538041535059272195 (1)

PewPew Standalone

A Python-based micro game console, optimized for game development workshops.

I really like the #PewPew FeatherWing as a platform for teaching game development, but the cost of Feather boards needed to use it makes it difficult to organize workshops for larger groups of people. I have previously tried to work around that problem by merging the FeatherWing with the schematic stolen from a Trinket M0 (with an additional flash memory), but the resulting design was complex, difficult to make and still a bit expensive. Now after having designed a few more CircuitPython boards I think I can really cut the costs and make a standalone device with all the functionality of the original shield, but optimized for workshops.

PewPew: Python-based micro game console