<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blockly | Go Education Project</title><link>https://goeducation.net/docs/blockly/</link><atom:link href="https://goeducation.net/docs/blockly/index.xml" rel="self" type="application/rss+xml"/><description>Blockly</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>en-us</language><image><url>https://goeducation.net/media/logo.svg</url><title>Blockly</title><link>https://goeducation.net/docs/blockly/</link></image><item><title>What is Blockly?</title><link>https://goeducation.net/docs/blockly/what-is-blockly/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://goeducation.net/docs/blockly/what-is-blockly/</guid><description>&lt;p&gt;
is an open-source visual programming editor from Google, now managed by the
. Instead of writing code character by character, you snap together puzzle-piece blocks that represent logic, loops, variables, and functions. Each arrangement of blocks corresponds to real source code - Blockly generates it for you in the background.&lt;/p&gt;
&lt;p&gt;It is widely used in education because it removes the barrier of syntax: you cannot make a typo, forget a semicolon, or misplace a bracket. You focus entirely on the logic of your program.&lt;/p&gt;
&lt;h2 id="our-tinygo-generator"&gt;Our TinyGo generator&lt;/h2&gt;
&lt;p&gt;Most Blockly environments generate JavaScript or Python. We built a &lt;strong&gt;custom Go/TinyGo code generator&lt;/strong&gt; on top of Blockly so that the same drag-and-drop experience produces code you can flash directly to a microcontroller.&lt;/p&gt;
&lt;p&gt;The goal is simple: &lt;strong&gt;make it easy to program MCUs&lt;/strong&gt;, even if you have never written a line of Go. A student can wire up an LED, drag a few blocks, click &amp;ldquo;To Go&amp;rdquo;, copy the output, and have real hardware blinking in minutes - no IDE, no compiler toolchain, no terminal.&lt;/p&gt;
&lt;p&gt;The generator covers the full TinyGo standard library surface that matters for physical computing: GPIO, time, sensors over I2C/SPI, displays, motors, networking, and more. As the block library grows, so does the range of hardware you can reach without writing a single character.&lt;/p&gt;
&lt;div class="not-prose my-8"&gt;
&lt;a href="https://goeducation.net/blockly-playground/" target="_blank" rel="noopener"
class="inline-flex items-center gap-3 px-6 py-3 rounded-full bg-primary-600 text-white font-semibold hover:bg-primary-700 transition-colors shadow-lg"&gt;
Open Visual Playground ↗
&lt;/a&gt;
&lt;/div&gt;
&lt;h2 id="what-you-can-do"&gt;What you can do&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Drag and drop blocks to build a program - no typing required&lt;/li&gt;
&lt;li&gt;See the generated TinyGo / Go code on demand with the &lt;strong&gt;To Go&lt;/strong&gt; button&lt;/li&gt;
&lt;li&gt;Load demo programs (Hello World, FizzBuzz, Gopherino robot, DS18B20 sensor)&lt;/li&gt;
&lt;li&gt;Save and load your workspace as XML&lt;/li&gt;
&lt;li&gt;Copy generated code to clipboard and flash it to your badge or board&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="available-block-categories"&gt;Available block categories&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Blocks&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Logic&lt;/td&gt;
&lt;td&gt;If/else, comparisons, boolean operators&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Loops&lt;/td&gt;
&lt;td&gt;Repeat, while, for-range&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Math&lt;/td&gt;
&lt;td&gt;Numbers, arithmetic, random&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Text&lt;/td&gt;
&lt;td&gt;Strings, print, I/O&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lists&lt;/td&gt;
&lt;td&gt;Create, get, set, length&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Colour&lt;/td&gt;
&lt;td&gt;Color pickers and values&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Variables&lt;/td&gt;
&lt;td&gt;Typed variables (dynamic)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Functions&lt;/td&gt;
&lt;td&gt;Define and call Go functions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TinyGo&lt;/td&gt;
&lt;td&gt;LED control, sleep, goroutines, defer, string conversion (atoi/itoa), read data, tuples&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GopherBadge&lt;/td&gt;
&lt;td&gt;Button input&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gopherino&lt;/td&gt;
&lt;td&gt;Movement, HC-SR04 distance sensor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sensors - Temp/Hum/Gases&lt;/td&gt;
&lt;td&gt;BME280, BMP280, BMP180, BMP388, AHT20, DHT11/DHT22, HTS221, MCP9808, ADT7410, DS18B20, MAX6675, SGP30, SCD4X, ENS160&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sensors - Motion/IMU&lt;/td&gt;
&lt;td&gt;MPU6050/6886/9150, ADXL345, LIS3DH, MMA8653, BMA42x, LSM6DSOX, LSM6DS3/TR, BMI160, QMI8658c, L3GD20, LIS2MDL, MAG3110, LSM303AGR/DLHC, LSM9DS1, BNO08x, AS5600&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sensors - Distance/Light&lt;/td&gt;
&lt;td&gt;HC-SR04 (ultrasonic), BH1750 (light), APDS9960 (proximity/color/gesture), AMG88xx (thermal 8x8)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sensors - Clock/RTC&lt;/td&gt;
&lt;td&gt;DS3231, PCF8523, PCF8563&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sensors - Power/Current&lt;/td&gt;
&lt;td&gt;INA219, INA260, AXP192, PCF8591 (ADC)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sensors - Input&lt;/td&gt;
&lt;td&gt;Keypad4x4, rotary encoder, MCP3008 (ADC SPI), FT6336 (touch), IR receiver NEC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Displays&lt;/td&gt;
&lt;td&gt;SH1106 (OLED 128x64), Adafruit4650 (OLED 128x32), PCD8544/Nokia5110, ILI9341 (TFT 320x240), GC9A01 (round TFT 240x240), HD44780 (char LCD), IS31FL3731 (LED matrix), Hub75 (RGB matrix)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LEDs&lt;/td&gt;
&lt;td&gt;APA102 (SPI strip), micro:bit 5x5 matrix, BlinkM (I2C RGB), WS2812/NeoPixel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network/Comms&lt;/td&gt;
&lt;td&gt;ESPAT (ESP8266/ESP32 WiFi), RTL8720DN (WiFi+BLE), SX127x (LoRa), MCP2515 (CAN bus)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Control/Motors&lt;/td&gt;
&lt;td&gt;Servo, buzzer, EasyStepper, L293x/L9110x (DC motor), PCA9685 (16-ch PWM), MCP23017 (GPIO expander)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Others&lt;/td&gt;
&lt;td&gt;AT24Cx EEPROM, Seesaw (I2C coprocessor)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Net/HTTP&lt;/td&gt;
&lt;td&gt;Cloudflare Workers, Fermyon Spin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Go Funcs&lt;/td&gt;
&lt;td&gt;Define and call reusable Go functions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="source-code"&gt;Source code&lt;/h2&gt;
&lt;p&gt;The generator and all block definitions live in the
repository. Contributions are welcome - whether that is a new sensor block, a fix to generated code, or better demo programs.&lt;/p&gt;</description></item><item><title>TinyGo Blockly Tester Program</title><link>https://goeducation.net/docs/blockly/tester-program/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://goeducation.net/docs/blockly/tester-program/</guid><description>&lt;p&gt;The TinyGo Blockly generator covers a large and growing surface: dozens of sensors, displays, motors, and communication modules - each with its own blocks and generated code paths. Testing all of it thoroughly is more than a small team can do alone, and &lt;strong&gt;we need your help&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;If you enjoy poking at things until they break, this is the perfect way to contribute to the project.&lt;/p&gt;
&lt;h2 id="what-we-are-looking-for"&gt;What we are looking for&lt;/h2&gt;
&lt;p&gt;Open the playground, pick a category, build a small program, and check whether the generated Go code looks correct. You are looking for things like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A block produces &lt;strong&gt;no output&lt;/strong&gt; or generates &lt;strong&gt;empty code&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;The generated code is &lt;strong&gt;syntactically wrong&lt;/strong&gt; (would not compile)&lt;/li&gt;
&lt;li&gt;The generated code is &lt;strong&gt;logically wrong&lt;/strong&gt; - imports the wrong package, calls the wrong function, uses the wrong pin or parameter&lt;/li&gt;
&lt;li&gt;A block &lt;strong&gt;crashes the playground&lt;/strong&gt; or behaves unexpectedly in the UI&lt;/li&gt;
&lt;li&gt;Two blocks that should work together &lt;strong&gt;produce incompatible code&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You do not need to own the hardware. If the code looks wrong to you compared to what the
says, that is already a useful report.&lt;/p&gt;
&lt;h2 id="how-to-report-a-bug"&gt;How to report a bug&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1. Open the playground&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Go to
and pick the category you want to test.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Reproduce the problem&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Build the simplest possible arrangement of blocks that triggers the issue. Fewer blocks = easier to fix.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Take a screenshot&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Capture both the block workspace and the generated Go code panel (click &amp;ldquo;To Go&amp;rdquo; first). A picture is worth a thousand words.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Save your workspace&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Click the save icon to download your workspace as an XML file. Attach it to the issue so maintainers can load it instantly and see exactly what you built.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5. Open an issue&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Go to
and open a new issue. Use the following structure:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Title: [Block name] short description of the problem
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;**Category:** e.g. Sensors - Temp/Hum/Gases
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;**Block(s):** e.g. BME280 read temperature
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;**Expected:** what the code should look like
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;**Got:** what the code actually generates
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Steps to reproduce:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. Open the playground
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. Drag block X from category Y
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. Connect it to block Z
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4. Click &amp;#34;To Go&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;5. Observe: ...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[Attach screenshot and workspace XML]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;6. Done - thank you!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Even a single well-described issue is a genuine contribution. The more detail you include, the faster it gets fixed.&lt;/p&gt;
&lt;h2 id="rewards"&gt;Rewards&lt;/h2&gt;
&lt;p&gt;We are a small open source project, so our rewards are modest but real:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Your name in the contributors list of the repository&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;shout-out&lt;/strong&gt; on our social channels when the fix ships&lt;/li&gt;
&lt;li&gt;The satisfaction of knowing your report helped someone flash working code to their hardware at a workshop&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you find and report &lt;strong&gt;five or more distinct bugs&lt;/strong&gt;, reach out to us - we would love to send you a small hardware thank-you from the Go Education project.&lt;/p&gt;
&lt;h2 id="tips-for-good-testing"&gt;Tips for good testing&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Start with a category you know something about - your own sensor, your own board&lt;/li&gt;
&lt;li&gt;Test the edge cases: what happens with the minimum value? The maximum? An empty string?&lt;/li&gt;
&lt;li&gt;Check that the generated &lt;code&gt;import&lt;/code&gt; statements match the blocks you used&lt;/li&gt;
&lt;li&gt;Compare the generated code against the official
source when in doubt&lt;/li&gt;
&lt;li&gt;If you are not sure whether something is a bug, open the issue anyway and ask - the worst that happens is it gets closed as &amp;ldquo;by design&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>