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

E-Paper Badge is a Hint at Great Things to Come

From All the Badges of DEF CON 26 (vol 3) on Hackaday:

36-epaper-hackaday-shoutout

E-Paper Badge is a Hint at Great Things to Come

Friend of Hackaday, Drew Fustini, came to our Breakfast at DEF CON meetup sporting a name badge of his own design. The E-Paper Badge uses a Teensy LC to drive a 2.15″ E-Paper display. The row of capacitive touch buttons to the left allow the image to be changed, and he just happened to have the Jolly Wrencher in the gallery of choices for this picture.

This badge gets me really excited for this year’s Open Hardware Summit which is at MIT on September 27th. This year’s badge is a collaborative effort between a group on Hackaday.io! It’s basically Drew’s badge on steroids, and he told me the experience of working with a team has been really positive. It seems each time the group hits a hard problem or a pile of work that needs to be done, someone on the team grabs it and runs with it. It’s a great example of both certified open hardware and team development.

Quote

Open Hardware Summit 2018 badge

OSH Park is producing electronic conference badges for the 2018 Open Hardware Summit.  The hardware has been designed Alex Camilo, based on concepts from the ESP trINKet by Mike Rankin.  The badge features an ESP32 microcontroller and a 2.13″ E-Paper display.

6202441533283525215

OSH Park shared project for the Rev 3 by Alex Camilo :

https://oshpark.com/shared_projects/8yeLK5gd

Order from OSH Park

a

b

We expect this to be the final revision.

Timeline:

It is ordered on Super Swift today and should be validated next weekend.  This will allow us to order the full quantity PCB panels in August 13th.  Assembly is estimated to be 10 business days from the day when all components and PCBs are received.

Rev 2 photos:

And for those interested, here is a link to a gallery:

https://photos.app.goo.gl/UhCUX7eRN38tAhsF7

IMG_20180805_031614

Terminal output on Rev 2 prototypes:

The Rev 2 prototypes have NodeMCU boards soldered on to the back to serve as a USB to serial adapter.

One of the Rev 2 prototype boards that Alex sent me has the default e-paper demo:

3633741533555804296

The other has MicroPython installed! 🙂

1079331533555818375

Resources for the 2018 Open Hardware Summit badge:

Open Hardware Summit 2018 badge