4597浏览
查看: 4597|回复: 5

[教程] 【Everything Is Message】创建第一个Scratch3.0 Extension

[复制链接]


【教程目的】
引入CodeLab Adapter,是为了能在树莓派中使用Scratch增加扩展。
CodeLab Adapter是什么
CodeLab Adapter早期的名字叫scratch-adapter,它最初的目的是提供一种更加灵活的方式来增强 Scratch。
就像Scratch3.0连接micro:bit,使用Scratch-Link一样。

【与 micro:bit 建立连接Scratch 社区的做法】
Scratch 社区在发布 3.0 版本的时候,一个重要的工作就是兼容 micro:bit。Scratch 团队似乎也认为 micro:bit 未来会是最重要的教育开源硬件生态(至少是之一)。
Scratch 团队采用的策略是构建一个Scratch-Link,使用它将 Scratch 与外部设备连接(主要是乐高)), 然后为 micro:bit 构建一个兼容于 Scratch-Link的固件。
Scratch 的做法是可以理解的,Scratch 的核心是交互式编程(Scratch 的许多设计理念来自 Smalltalk),而不是灌入式编程,所以他们为树莓派写了固件,来服务于交互式编程。关于这点我在两种硬件编程风格的比较里做了详尽讨论。
目前 scratch 开放了Scratch-Link 的源码,但 micro:bit 的源码目前尚未开源。


CodeLab Adapter进行了延展
CodeLab Adapter并不限于增强 Scratch,它已经成为:
致力于连接万物,无论是软件还是硬件,无论是 AI、开源硬件、现实世界的物体、还是虚拟世界的动画角色,在 CodeLab Adapter 的驱动下,皆可彼此互动。 目前,我们在 CodeLab Neverland 中使用 CodeLab Adapter。CodeLab Neverland 是一个由 CodeLab Adapter 驱动的可编程空间,空间里的所有事物皆可编程。

【支持目前最流行的三大开源硬件】
  • micro:bit
  • Raspberry Pi(显示正在构建中)
  • Arduino
未来支持:更多的开源硬件支持,如 esp8266 等。
创建第一个Scratch3.0 Extension用户操作手册
创建你的第一个Scratch3.0 Extension(尽管 Scratch3 官方的 extensions 机制已经可用了,可以在 Scratch 3.0 中写插件,但社区里文档不多,不大建议大家来踩坑,如果愿意折腾,可以参考创建你的第一个 Scratch 3.0 Extension。)

写一个自定义的插件
1、EIM使用CodeLab Scratch3中构建的通用消息积木)eim 每秒钟更新一次数值,将数值报告给 Scratch3。
2、教程(hello world)
https://codelab-adapter-docs.codelab.club/dev_guide/helloworld/
3、修改代码,实现广播信息后,返回本地时间
[mw_shl_code=python,false]import time
from codelab_adapter.core_extension import Extension


class HelloWorldExtension(Extension):
    def __init__(self):
        super().__init__()
        self.EXTENSION_ID = "eim"

    def send_message_to_scratch(self, content):
        message = self.message_template()
        message["payload"]["content"] = content
        self.publish(message)

    def extension_message_handle(self, topic, payload):#是个回调函数,处理从 Scratch 过来的消息(一般由积木触发)
        self.logger.info(f'the message payload from scratch: {payload}')
        content = payload["content"]
        if type(content) == str:
            content_send_to_scratch = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())  # 返回本地时间
            self.send_message_to_scratch(content_send_to_scratch)

    def run(self):
        while self._running:
            time.sleep(1)

export = HelloWorldExtension[/mw_shl_code]
4、识取屏幕某点颜色

[mw_shl_code=python,false]import time
from codelab_adapter.core_extension import Extension
from ctypes import *  # 获取屏幕上某个坐标的颜色

class HelloWorldExtension(Extension):
    def __init__(self):
        super().__init__()
        self.EXTENSION_ID = "eim"
   
    def get_color(self,x, y):
     gdi32 = windll.gdi32
     user32 = windll.user32
     hdc = user32.GetDC(None)  # 获取颜色值
     pixel = gdi32.GetPixel(hdc, x, y)  # 提取RGB值
     r = pixel & 0x0000ff
     g = (pixel & 0x00ff00) >> 8
     b = pixel >> 16
     return r

    def send_message_to_scratch(self, content):
        message = self.message_template()
        message["payload"]["content"] = content
        self.publish(message)

    def extension_message_handle(self, topic, payload):#是个回调函数,处理从 Scratch 过来的消息(一般由积木触发)
        self.logger.info(f'the message payload from scratch: {payload}')
        content = payload["content"]
        if type(content) == str:
            content_send_to_scratch = self.get_color(100,100)  # 获取颜色值
            self.send_message_to_scratch(content_send_to_scratch)

    def run(self):
        while self._running:
            time.sleep(1)

export = HelloWorldExtension[/mw_shl_code]






【Everything Is Message】创建第一个Scratch3.0 Extension图2



第一帖子:智控万物之掌控微信



























【以下为个人学习内容(备忘录)】

https://blog.just4fun.site/post/%E5%B0%91%E5%84%BF%E7%BC%96%E7%A8%8B/adapter-tensorflow/

https://codelab-adapter-docs.codelab.club/extension_guide/microbit/

树莓派4B因为性能的巨大提升,采用电源性能更好的 type c 作为供电口。令人不可思议的是树莓派4B的 USB-C 居然缺少一个 5.1k 欧姆的电阻:原本有两个电阻,分别是R1和R79,结果变成了共用一个电阻。于是所有带有 e-mark 的 type c 电源(可以简单的理解为pd标准的电源)连接树莓派4B的时候都会被当作非供电设备,比如耳机等。


树莓派4确认翻车:官方承认硬件设计失败
树莓派4B修复USB-C供电问题的新版已出货

新版4B版本的检测方法如下:
在终端输入 cat /proc/cpuinfo 将会显示硬件版本,倒数第二行里有Revision。如果是如下的字符串,说明你买到的是已经修复的新版本,Revision: c03112
值得注意的是,目前只有4G版本才有1.2版出货
我在命令行输入pinout查看,我的还是旧版本。
【Everything Is Message】创建第一个Scratch3.0 Extension图1
学习笔记:


初始化配置sudo raspi-config
启动图形化界面startx
升级系统sudo rpi-update
立即关机sudo shutdown -h now
更新软件源sudo apt-get update
更新已经安装的软件sudo apt-get upgrade
安装XX软件sudo apt-get install XX
切换到root用户su root
设置user用户的密码passwd user
修改网络参数sudo nano /etc/network/interfaces
查看网络配置ifconfig -a
重启网络sudo service networking restart
扫描WIFIsudo iwlist wlan0 scan
获取GPIO信息gpio readall
重启sudo reboot
资源管理命令:
1、top :查看系统的运行情况
2、free -m(-k, -g):查看内存分配情况
3、sudo df -h :查看磁盘使用情况
4、sudo du -sh :查看当前目录下的磁盘使用信息
文件管理
1、pwd :显示当前的绝对路径
2、cd :切换路径
3、cd .. :切换到上级目录
4、find :查找文件





DFrJ5KYVQaH  中级技匠

发表于 2020-4-21 23:02:29

好文章,学习中
回复

使用道具 举报

rzyzzxw  版主

发表于 2020-4-22 08:07:01

云天老师,你宝贝好多。
回复

使用道具 举报

gray6666  初级技神

发表于 2020-4-22 08:36:20

羡慕。。。。。。。。。。。。。
回复

使用道具 举报

云天  初级技神
 楼主|

发表于 2020-4-22 17:56:15

rzyzzxw 发表于 2020-4-22 08:07
云天老师,你宝贝好多。

我有很多,但上图中有很多没有,不过都会有的(做梦中……)
回复

使用道具 举报

pATAq  版主

发表于 2020-4-25 01:28:20

学习到新知识了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail