日期:106年3月8日、3月15日、3月22日
地點:新北市教研中心
講師:蔡佳倫老師
三周的課程如下:
—————————————————————-
3/8 第一節課會先講語言的轉換
3/15 第二節講講mblock的積木撰寫
3/22 第三節會講python跟scratch
—————————————————————-
設備使用 Arduino模擬器 和 S2A,不用準備硬體!
課程內容:
Scratch 擴充積木設計:
- Scratch2.0桌面版(離線版)下載
- Scratch Extension – Scratch Wiki
- BlocklyDesigner 檔案下載
- 安裝 Python 3.5.2
- avrdude.exe 是 Arduino 燒錄程式
- esptool.exe 是 NodeMCU 燒錄程式
- Scratch Extension URL – 臺中市教育局-數位教學平台
教學範例:
base_helper.s2e
{
“extensionName": " 自訂積木 “,
“extensionPort": 50000,
“blockSpecs": [
[“r", “資料", “hello"],
[“r", “資料1″, “hello1″],
]
}
用Python擴充我的Scratch2 — 原理與Hello World篇
base_helper_py3.py
def do_GET(self):
try:
""" process HTTP GET requests """
# skip over the first / . example: /poll -> poll cmd = self.path[1:]
# create a command list . cmd_list = cmd.split('/') s = "不回傳資料"
###### 處理Scratch送出的命令 ###### 若需回應Scratch的Poll命令,再把文字存在變數s ## ############################################################## crlf = "\r\n" if cmd_list[0] == "poll": s="hello " + "hello" + crlf s+="hello1 " + "hello1" + crlf #############################################################
except:
s = “不回傳資料"
finally:
self.send_resp(s)
Creating Scratch 2.0 Extensions 摘要說明:
Block description
Each block is described by an array with the following fields:
- block type
- block format
- operation or remote variable name
- (optional) zero or more default parameter values
The block type is one of these strings:
- " " – command block
- “w" – command block that waits
- “r" – number reporter block (round ends) ==> 前面有帶一個 checkbox
- “b" – boolean reporter block (pointy ends)
- “R" – Reporters that wait (round ends)
The block format is a string that describes the labels and parameter slots that appear on the block. Parameter slots are indicated by a word starting with “%" and can be one of:
- %n – number parameter (round ends)
- %s – string parameter (square ends)
- %b – boolean parameter (pointy ends)
Menu parameters
Both command and reporter blocks can include menu parameters:
- %m.menuName – menu parameter (not editable)
- %d.menuName – editable number parameter with menu
{ "extensionName": "Kinect", "extensionPort": 12345, "blockSpecs": [ ["r", "get %m.coordinate position of %m.bodyPart", "position"], ], "menus": { "coordinate": ["x", "y", "z"], "bodyPart": ["head", "shoulder", "elbow", "hand"], }, }
position/y/hand 247 => 回傳值為 247 (鍵、值用空格分隔)
Polling (每秒 30 次)
Scratch to retrieves sensor values and status information from the helper app by sending a poll command:
request: /poll
Here’s an example poll response:
response: 鍵、值用空格分隔,每一筆資料用 crlf (\r\n) 分隔
brightness 75 + crlf (\r\n)
slider 17 + crlf (\r\n)
Commands
/beep (command with no parameters)
/setVolume/5 (command with a numeric parameter)
Commands that wait
turn motor on for 3 seconds
turns on the motor, waits three seconds, then turns it off again. When this block is used in a script, execution does not continue to the next block until the command completes. A command that waits is indicated by the “w" block type in the command descriptor.
When a “w" command is invoked, Scratch adds a unique command_id parameter to the request (before any other parameters). For example, for the motor command above Scratch would send:
request: /motorOn/2437/3
The first parameter, 2437, is a unique identifier for this invocation of the command. For the three seconds that this command takes to complete, the helper app adds a busy line to the poll request:
response: _busy 2437 …
A busy line consists of the string “_busy" followed by a list of unique identifiers separated by spaces. When Scratch gets a poll result that doesn’t include 2437 in the busy line (or doesn’t even have a busy line), it knows that the command is complete and allows the script that invoked that command to proceed.
Reporters that wait (目前已實作出來) => “R"
temperature in city_name
request: /getTemperature/7639/Boston
response: _result 7639 82
Reset command
Scratch extensions can control motors or music synthesizers. Users expect to be able to stop everything — turn off motors, silence music synthesizers, and reset hardware back to it’s original state — by clicking the stop button in the Scratch editor. Thus, when the stop button is clicked, Scratch sends a reset command to all active extensions:
request: /reset_all
參考資料與範例:
- ScratchX
- Scratch Extension URL – 臺中市教育局-數位教學平台
- Arduino Blog – Scratch extension for Arduino (experimental release)
- 範例程式:https://github.com/jimmyscratchlab/ScratchCoin
- Python 語言及其應用
mBlock 擴充積木設計:
- Create Extensions for mBlock
- Arduino 4×4薄膜鍵盤模組實驗(一):按鍵掃描程式原理說明
- github-Makeblock-official | mblock
mBlock 積木程式轉Arduino 程式教學:
- 葉難: Arduino練習:以開關切換LED明滅狀態
- mBlock 官方網站 – 用於Arduino/機器人的Scratch分支
- 一套大陸發展的 S2A 積木程式,可以將 S2A 積木程式轉換成 Arduino 程式。
- Arduino線上電路與程式模擬軟體-123D Circuits
範例一:
Autodesk 123D circuits 繪圖
mBlock 積木程式:
Arduino 程式
#include <Arduino.h>
#include <Wire.h>
#include <SoftwareSerial.h>
double angle_rad = PI/180.0;
double angle_deg = 180.0/PI;
double switchStatus;
void setup(){
Serial.begin(9600); //改成9600,才能於123D中執行
pinMode(2,INPUT);
}
void loop(){
switchStatus = digitalRead(2);
Serial.println(switchStatus);
_loop();
}
void _delay(float seconds){
long endTime = millis() + seconds * 1000;
while(millis() < endTime)_loop();
}
範例二:
Autodesk 123D circuits 繪圖
mBlock 積木程式:
Arduino 程式
#include <Arduino.h>
#include <Wire.h>
#include <SoftwareSerial.h>
double angle_rad = PI/180.0;
double angle_deg = 180.0/PI;
double Button;
double LED;
void setup(){
Button = 2;
LED = 12;
pinMode(Button,INPUT);
pinMode(LED,OUTPUT);
}
void loop(){
if(((digitalRead(Button))==(1))){
digitalWrite(LED,1);
}else{
digitalWrite(LED,0);
}
_loop();
}
void _delay(float seconds){
long endTime = millis() + seconds * 1000;
while(millis() < endTime)_loop();
}
void _loop(){
}
參考資料:
- 蔡佳倫 Facebook
- Blockly | Google Developers
- BlocklyDesigner 教學網站
- BlocklyDesigner 教學文件 (Arduino UNO)
- BlocklyDesigner 檔案下載
- ESP8266 ( ESP-01 ) 無線模組燒錄 NodeMCU 韌體 ( Lua 語法支援 )
- NodeMCU 物聯網開發平台
- NodeMCU GitHub
- Wiki : NodeMCU
- 「nodeMCU」的圖片搜尋結果
- JOYSTICK SHIELD V1.A
- Autodesk 123D circuits – rousekimo Tom(蔡佳倫作品集)
- Arduino 官方網站
- mBlock 程式設計 — mBot 機器人 | 碧華國小創客教育中心。
- Arduino、S4A、S2A、Transformer
- Webduino
- WFduino
- Python 語言及其應用