diff --git a/README.md b/README.md index f96bfc3..774961a 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,98 @@ -# badgeconf +# BadgeConf +**BadgeConf** is an electronic conference badge and a hands-on platform for learning [TinyGo](https://tinygo.org/) programming. + +Whether you are attending a conference or just getting started with embedded development, BadgeConf gives you a real piece of hardware to hack on, complete with a ready-to-use firmware, step-by-step tutorials, and progressively more advanced examples that unlock every capability of the board. + +--- + +## Features + +| Peripheral | Details | +|---|---| +| Color display | Compact full-color screen (FJ08K-S) | +| Buttons | 2 Cherry MX hot-swap mechanical switches | +| Joystick | Alps EC11E rotary encoder with push switch | +| RGB LEDs | 2 × SK6812MINI-E addressable LEDs | +| StemmQT connector | JST SH 4-pin for I2C expansion modules | +| Buzzer | 5.5 mm buzzer for audio feedback | +| Bluetooth | BLE via the nRF52840 on the nice!nano | +| USB HID | Acts as a keyboard/mouse over USB thanks to the nice!nano | +| Battery | Onboard battery cell header (2-pin 2.00 mm) | + +The microcontroller is the **[nice!nano](https://nicekeyboards.com/nice-nano/)** (nRF52840), which is fully supported by TinyGo and exposes both USB HID and Bluetooth HID out of the box. + +--- + +## Repository layout + +``` +badgeconf/ +├── hardware/ # KiCad PCB design files +│ └── PCB-kicad/ +│ └── production/ # Gerbers, BOM, pick-and-place files +├── firmware/ # Ready-to-use TinyGo firmware (coming soon) +└── tutorials/ # Step-by-step examples (coming soon) +``` + +--- + +## Getting started + +### Prerequisites + +- [TinyGo](https://tinygo.org/getting-started/) ≥ 0.32 +- [Go](https://go.dev/dl/) ≥ 1.22 +- A BadgeConf board (see hardware section below) or a compatible nice!nano dev board + +### Flash the default firmware + +```bash +tinygo flash -target=nicenano ./firmware/ +``` + +--- + +## Hardware + +All design files are located in [hardware/PCB-kicad/](hardware/PCB-kicad/). +Production files (Gerbers, BOM, positions) ready for fabrication are in [hardware/PCB-kicad/production/](hardware/PCB-kicad/production/). + +### Bill of Materials + +| Designator | Value / Part | Footprint | Qty | +|---|---|---|---| +| BT1 | Battery Cell | PinHeader 2×01 P2.00 mm Vertical | 1 | +| BZ1 | Buzzer | Buzzer 5.5 mm | 1 | +| DISPLAY1 | Display connector | PinHeader 1×08 P2.54 mm Vertical | 1 | +| H1, H2, H3, H4 | Mounting Hole | M2 | 4 | +| LED1, LED2 | YS-SK6812MINI-E | SK6812MINI-E | 2 | +| R1, R2 | Resistor | Axial DIN0207 L6.3 mm D2.5 mm P10.16 mm | 2 | +| STEMMAQT1 | StemmQT connector | JST SH SM04B-SRSS-TB 1×04 P1.00 mm | 1 | +| SW1, SW2B1 | Push switch | Cherry MX Hot-swap | 2 | +| SW2 | Rotary Encoder + Switch | Alps EC11E Vertical H20 mm | 1 | +| SW2B, SW2C | Key switch | Strap hole | 2 | +| U1 | nice!nano | nice_nano | 1 | +| U2 | FJ08K-S | FJ08K-S | 1 | + +--- + +## Tutorials & examples + +The tutorial series walks you through every peripheral of the badge, starting from blinking an LED and ending with a Bluetooth HID device: + +1. Hello, Badge! — blink the RGB LEDs +2. Drawing on the display — TinyGo + TinyDraw +3. Reading buttons and the joystick +4. Playing sounds with the buzzer +5. I2C expansion via StemmQT +6. Going wireless — BLE advertisements and GATT services +7. USB HID — turn the badge into a keyboard + +*(Tutorials are coming soon — contributions welcome!)* + +--- + +## License + +See [LICENSE](LICENSE). diff --git a/hardware/PCB-kicad/production/backups/badgeconf_2026-04-14_18-54-21.zip b/hardware/PCB-kicad/production/backups/badgeconf_2026-04-14_18-54-21.zip new file mode 100644 index 0000000..bfb48cc Binary files /dev/null and b/hardware/PCB-kicad/production/backups/badgeconf_2026-04-14_18-54-21.zip differ diff --git a/hardware/PCB-kicad/production/badgeconf.zip b/hardware/PCB-kicad/production/badgeconf.zip new file mode 100644 index 0000000..7cf6596 Binary files /dev/null and b/hardware/PCB-kicad/production/badgeconf.zip differ diff --git a/hardware/PCB-kicad/production/bom.csv b/hardware/PCB-kicad/production/bom.csv new file mode 100644 index 0000000..1f9d030 --- /dev/null +++ b/hardware/PCB-kicad/production/bom.csv @@ -0,0 +1,13 @@ +Designator,Footprint,Quantity,Value,LCSC Part # +BT1,PinHeader_2x01_P2.00mm_Vertical,1,Battery_Cell, +BZ1,buzzer 5.5mm,1,Buzzer, +DISPLAY1,PinHeader_1x08_P2.54mm_Vertical,1,Conn_01x08_Socket, +"H1, H2, H3, H4",M2_HOLE_v2,4,MountingHole, +"LED1, LED2",YS-SK6812MINI-E,2,YS-SK6812MINI-E, +"R1, R2",R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal,2,R, +STEMMAQT1,JST_SH_SM04B-SRSS-TB_1x04-1MP_P1.00mm_Horizontal,1,Conn_01x04_Socket, +"SW1, SW2B1",CherryMX_Hotswap,2,SW_PUSH, +SW2,RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm,1,RotaryEncoder_Switch, +"SW2B, SW2C",strap_hole,2,KEY_SWITCH, +U1,nice_nano,1,nice_nano, +U2,FJ08K-S,1,fj08k-s, diff --git a/hardware/PCB-kicad/production/designators.csv b/hardware/PCB-kicad/production/designators.csv new file mode 100644 index 0000000..f82de6d --- /dev/null +++ b/hardware/PCB-kicad/production/designators.csv @@ -0,0 +1,19 @@ +BT1:1 +BZ1:1 +DISPLAY1:1 +H1:1 +H2:1 +H3:1 +H4:1 +LED1:1 +LED2:1 +R1:1 +R2:1 +STEMMAQT1:1 +SW1:1 +SW2:1 +SW2B:1 +SW2B1:1 +SW2C:1 +U1:1 +U2:1 diff --git a/hardware/PCB-kicad/production/netlist.ipc b/hardware/PCB-kicad/production/netlist.ipc new file mode 100644 index 0000000..7d8beb5 --- /dev/null +++ b/hardware/PCB-kicad/production/netlist.ipc @@ -0,0 +1,113 @@ +P CODE 00 +P UNITS CUST 0 +P arrayDim N +317GND VIA MD0118PA00X+028214Y-013017X0236Y0000R000S3 +3173V3 VIA MD0118PA00X+014719Y-029293X0236Y0000R000S3 +3173V3 VIA MD0118PA00X+042519Y-019435X0236Y0000R000S3 +3173V3 VIA MD0118PA00X+014850Y-024532X0236Y0000R000S3 +317SK6812MINI-E VIA MD0118PA00X+044850Y-011855X0236Y0000R000S3 +317SCL VIA MD0118PA00X+014708Y-030017X0236Y0000R000S3 +317SDA VIA MD0118PA00X+015794Y-027949X0236Y0000R000S3 +317ROT_B VIA MD0118PA00X+023879Y-016694X0236Y0000R000S3 +317SW_1 VIA MD0118PA00X+044078Y-023775X0236Y0000R000S3 +317SW_2 VIA MD0118PA00X+043679Y-019559X0236Y0000R000S3 +317BATIN VIA MD0118PA00X+013794Y-017285X0236Y0000R000S3 +317SCK VIA MD0118PA00X+030494Y-016894X0236Y0000R000S3 +317BUZZER BZ1 -1 D0630PA00X+015435Y-030600X1000Y0000R000S0 +317GND BZ1 -2 D0630PA00X+017600Y-030600X1000Y0000R000S0 +367N/C H3 D1693UA00X+015354Y-033858X1693Y0000R000S0 +317ROT_A SW2 -A D0394PA00X+043602Y-013189X0787Y0787R000S0 +317ROT_B SW2 -B D0394PA00X+043602Y-015157X0787Y0000R000S0 +317GND SW2 -C D0394PA00X+043602Y-014173X0787Y0000R000S0 +317N/C SW2 -MP D0591PA00X+046555Y-011969X1260Y0787R000S0 +317N/C SW2 -MP D0591PA00X+046555Y-016378X1260Y0787R000S0 +317ROT_BTN SW2 -S1 D0394PA00X+049311Y-015157X0787Y0000R000S0 +317GND SW2 -S2 D0394PA00X+049311Y-013189X0787Y0000R000S0 +327GND Stemma-1 A01X+013956Y-028907X0236Y0610R090S2 +3273V3 Stemma-2 A01X+013956Y-029301X0236Y0610R090S2 +327SDA Stemma-3 A01X+013956Y-029694X0236Y0610R090S2 +327SCL Stemma-4 A01X+013956Y-030088X0236Y0610R090S2 +327N/C Stemma-MP A01X+012430Y-028395X0472Y0709R090S2 +327N/C Stemma-MP A01X+012430Y-030600X0472Y0709R090S2 +367N/C SW1 D0748UA00X+044654Y-029134X0748Y0000R000S0 +367N/C SW1 D1181UA00X+045154Y-028134X1181Y0000R000S0 +367N/C SW1 D1614UA00X+046654Y-029134X1614Y0000R270S0 +367N/C SW1 D1181UA00X+047654Y-027134X1181Y0000R000S0 +367N/C SW1 D0748UA00X+048654Y-029134X0748Y0000R000S0 +327SW_1 SW1 -1 A02X+043864Y-028134X1004Y0984R180S1 +327GND SW1 -2 A02X+048954Y-027134X1004Y0984R180S1 +3173V3 R1 -1 D0315PA00X+030400Y-018800X0630Y0000R180S0 +317SDO R1 -2 D0315PA00X+026400Y-018800X0630Y0000R180S0 +367N/C H4 D1693UA00X+047638Y-033858X1693Y0000R000S0 +367N/C SW2b1 D0748UA00X+044654Y-021260X0748Y0000R000S0 +367N/C SW2b1 D1181UA00X+045154Y-020260X1181Y0000R000S0 +367N/C SW2b1 D1614UA00X+046654Y-021260X1614Y0000R270S0 +367N/C SW2b1 D1181UA00X+047654Y-019260X1181Y0000R000S0 +367N/C SW2b1 D0748UA00X+048654Y-021260X0748Y0000R000S0 +327SW_2 SW2b1 -1 A02X+043864Y-020260X1004Y0984R180S1 +327GND SW2b1 -2 A02X+048954Y-019260X1004Y0984R180S1 +317SH}P0.06-PAD1) U1 -1 D0430PA00X+013370Y-017717X0690Y0000R000S0 +317SH}P0.08-PAD2) U1 -2 D0430PA00X+014370Y-017717X0690Y0000R000S0 +317GND U1 -3 D0430PA00X+015370Y-017717X0690Y0000R000S0 +317GND U1 -4 D0430PA00X+016370Y-017717X0690Y0000R000S0 +317SDA U1 -5 D0430PA00X+017370Y-017717X0690Y0000R000S0 +317SCL U1 -6 D0430PA00X+018370Y-017717X0690Y0000R000S0 +317ROT_BTN U1 -7 D0430PA00X+019370Y-017717X0690Y0000R000S0 +317ROT_A U1 -8 D0430PA00X+020370Y-017717X0690Y0000R000S0 +317ROT_B U1 -9 D0430PA00X+021370Y-017717X0690Y0000R000S0 +3171-P0.11-PAD10) U1 -10 D0430PA00X+022370Y-017717X0690Y0000R000S0 +317SW_1 U1 -11 D0430PA00X+023370Y-017717X0690Y0000R000S0 +317SW_2 U1 -12 D0430PA00X+024370Y-017717X0690Y0000R000S0 +317BLK U1 -13 D0430PA00X+024370Y-011717X0690Y0000R000S0 +317CS U1 -14 D0430PA00X+023370Y-011717X0690Y0000R000S0 +317SK6812MINI-E U1 -15 D0430PA00X+022370Y-011717X0690Y0000R000S0 +317DC U1 -16 D0430PA00X+021370Y-011717X0690Y0000R000S0 +317RES U1 -17 D0430PA00X+020370Y-011717X0690Y0000R000S0 +317VR_Y U1 -18 D0430PA00X+019370Y-011717X0690Y0000R000S0 +317VR_X U1 -19 D0430PA00X+018370Y-011717X0690Y0000R000S0 +317BUZZER U1 -20 D0430PA00X+017370Y-011717X0690Y0000R000S0 +3173V3 U1 -21 D0430PA00X+016370Y-011717X0690Y0000R000S0 +317(U1-RST-PAD22) U1 -22 D0430PA00X+015370Y-011717X0690Y0000R000S0 +317GND U1 -23 D0430PA00X+014370Y-011717X0690Y0000R000S0 +317BATIN U1 -24 D0430PA00X+013370Y-011717X0690Y0000R000S0 +317SCK U1 -31 D0430PA00X+022370Y-016717X0690Y0000R000S0 +317SDO U1 -32 D0430PA00X+022370Y-015717X0690Y0000R000S0 +3171-P1.07-PAD33) U1 -33 D0430PA00X+022370Y-014717X0690Y0000R000S0 +317N/C U1 -34 D0430PA00X+023090Y-016607X0690Y0000R000S0 +317N/C U1 -35 D0430PA00X+023090Y-015607X0690Y0000R000S0 +317N/C U1 -36 D0430PA00X+023090Y-014607X0690Y0000R000S0 +317N/C U1 -37 D0430PA00X+012370Y-011717X0690Y0000R000S0 +317N/C U1 -38 D0430PA00X+012370Y-017717X0690Y0000R000S0 +317GND DISPLA-1 D0394PA00X+027953Y-009449X0669Y0669R270S0 +3173V3 DISPLA-2 D0394PA00X+028953Y-009449X0669Y0000R270S0 +317SCK DISPLA-3 D0394PA00X+029953Y-009449X0669Y0000R270S0 +317SDO DISPLA-4 D0394PA00X+030953Y-009449X0669Y0000R270S0 +317RES DISPLA-5 D0394PA00X+031953Y-009449X0669Y0000R270S0 +317DC DISPLA-6 D0394PA00X+032953Y-009449X0669Y0000R270S0 +317CS DISPLA-7 D0394PA00X+033953Y-009449X0669Y0000R270S0 +317BLK DISPLA-8 D0394PA00X+034953Y-009449X0669Y0000R270S0 +367N/C H1 D1693UA00X+015354Y-009449X1693Y0000R000S0 +367N/C U2 D0630UA00X+013275Y-020977X0630Y0000R000S0 +367N/C U2 D0630UA00X+018000Y-025701X0630Y0000R000S0 +317GND U2 -1 D0433PA00X+016425Y-019953X0600Y0000R000S0 +317VR_X U2 -2 D0433PA00X+015637Y-019953X0600Y0000R000S0 +3173V3 U2 -3 D0433PA00X+014850Y-019953X0600Y0000R000S0 +3173V3 U2 -4 D0433PA00X+019023Y-024126X0600Y0000R000S0 +317VR_Y U2 -5 D0433PA00X+019023Y-023339X0600Y0000R000S0 +317GND U2 -6 D0433PA00X+019023Y-022552X0600Y0000R000S0 +317(U2-SW-A-PAD7) U2 -7 D0433PA00X+018236Y-020189X0600Y0000R000S0 +317(U2-SW-B-PAD8) U2 -8 D0433PA00X+018787Y-020741X0600Y0000R000S0 +367N/C H2 D1693UA00X+047638Y-009449X1693Y0000R000S0 +3173V3 R2 -1 D0315PA00X+036400Y-018800X0630Y0000R180S0 +317SCK R2 -2 D0315PA00X+032400Y-018800X0630Y0000R180S0 +317BATIN BT1 -1 D0315PA00X+023400Y-019313X0531Y0531R090S0 +317GND BT1 -2 D0315PA00X+023400Y-020100X0531Y0000R090S0 +3273V3 LED1 -1 A02X+045177Y-022953X0669Y0394R180S1 +327ET-(LED1-DOUT) LED1 -2 A02X+045177Y-023504X0669Y0394R180S1 +327GND LED1 -3 A02X+047343Y-023504X0669Y0394R180S1 +327SK6812MINI-E LED1 -4 A02X+047343Y-022953X0669Y0394R180S1 +3273V3 LED2 -1 A02X+045374Y-030827X0669Y0394R180S1 +327ED2-DOUT-PAD2) LED2 -2 A02X+045374Y-031378X0669Y0394R180S1 +327GND LED2 -3 A02X+047539Y-031378X0669Y0394R180S1 +327ET-(LED1-DOUT) LED2 -4 A02X+047539Y-030827X0669Y0394R180S1 +999 diff --git a/hardware/PCB-kicad/production/positions.csv b/hardware/PCB-kicad/production/positions.csv new file mode 100644 index 0000000..0ab62e3 --- /dev/null +++ b/hardware/PCB-kicad/production/positions.csv @@ -0,0 +1,16 @@ +Designator,Mid X,Mid Y,Rotation,Layer +BT1,59.436,-50.054,270.0,bottom +BZ1,41.954,-77.724,0.0,top +DISPLAY1,79.89,-24.0,90.0,top +LED1,117.5,-59.0,0.0,bottom +LED2,118.0,-79.0,0.0,bottom +R1,72.136,-47.752,180.0,top +R2,87.376,-47.752,180.0,top +STEMMAQT1,33.4472,-74.924,270.0,top +SW1,117.8785,-71.735,0.0,top +SW2,118.0,-36.0,0.0,top +SW2B,49.982,-24.13,0.0,top +SW2B1,117.8785,-51.735,0.0,top +SW2C,109.982,-24.13,0.0,top +U1,46.66,-37.38,0.0,top +U2,41.0,-58.0,0.0,top