Flipper Zero是一个比较有意思的电子宠物,最近发现它支持使用JS语言开发APP,简单写篇文章记录一下
我的Flipper Zero固件是unleashed-firmware[1],在它的GitHub Release页面,打开Install via Web页面,使用USB将Flipper Zero与电脑连接,即可刷入该固件。


拉取unleashed-firmware固件源代码后,在applications/system/js_app目录下,可以发现如下所示的目录结构,其中Scripts目录是JS APP源代码,modules目录是提供给JS APP调用的SDK的底层实现。Flipper Zero使用的JS解释引擎是MJS[3],这个解释引擎是专门为嵌入式场景设计的,实现了JS ES6标准的子集。

以badusb_demo.js为例,它的部分代码如下所示,它依赖于badusb, notification, flipper, dialog等SDK模块,这些模块的实现在modules目录下的js_badusb.c,js_notification.c等文件中。目前好像没有文档统计提供了哪些JS SDK,只能自己看这些文件确定。从文件列表来看提供的SDK接口还是非常全面的。
把Flipper Zero的SD卡取下,插入读卡器,把JS应用上传进入apps/Scripts目录即可

进入桌面,在Apps -> Scripts下,找到上传的JS应用文件即可执行。

简单写了个JS应用,首先按下 WIN+R ,然后输入chrome,再按ENTER键,打开CHROME浏览器,然后在地址框输入www.baidu.com,按ENTER跳转到该地址。
[1] https://github.com/DarkFlippers/unleashed-firmware
[2] https://github.com/DarkFlippers/unleashed-firmware/releases/tag/unlshd-072
[3] https://github.com/cesanta/mjs
let badusb = require(
"badusb"
);
let notify = require(
"notification"
);
let flipper = require(
"flipper"
);
let dialog = require(
"dialog"
);
let badusb = require(
"badusb"
);
let notify = require(
"notification"
);
let flipper = require(
"flipper"
);
let dialog = require(
"dialog"
);
let badusb = require(
"badusb"
);
let notify = require(
"notification"
);
let dialog = require(
"dialog"
);
badusb.setup({ vid: 0xAAAA, pid: 0xBBBB, mfr_name:
"Flipper"
, prod_name:
"Zero"
});
dialog.message(
"BadUSB DEMO For Windows"
,
"Press OK to start"
);
if
(badusb.isConnected()) {
notify.blink(
"green"
,
"short"
);
print(
"USB is connected"
);
delay(1000);
badusb.press(
"GUI"
,
"r"
);
delay(1000);
badusb.println(
"chrome"
);
badusb.press(
"ENTER"
);
delay(1000);
badusb.println(
"http://www.baidu.com"
);
badusb.press(
"ENTER"
);
notify.success();
}
else
{
print(
"USB not connected"
);
notify.error();
}
badusb.quit();
let badusb = require(
"badusb"
);
let notify = require(
"notification"
);
let dialog = require(
"dialog"
);
badusb.setup({ vid: 0xAAAA, pid: 0xBBBB, mfr_name:
"Flipper"
, prod_name:
"Zero"
});
dialog.message(
"BadUSB DEMO For Windows"
,
"Press OK to start"
);
if
(badusb.isConnected()) {
[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!