0%

在home-assistant安装node-red插件后,在配置注意以下:
1、credential_secret随便编写英文字母即可,username和password(注意有两个)需单独设定并且不能与hass账号密码重复,password最好设置为大小写字母跟数字的组合,ssl没有开启的话设置为false(truce可以试试看),设置完成后点击save。
2、点击start运行插件并查看下方log信息(可通过刷新更新log信息),确保『Node-RED』插件正常运行后才可以点击“OPEN WEB UI”。有可能需要重启就正常啦。
3、登录时用的账户密码是hass的账户和密码,不是配置时设定的账户和密码

我们调试ESP32都知道,在idf monitor中,如果出现Guru Meditation Error 错误时,会看到错误出现的具体文件函数以及代码行数。如下这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Guru Meditation Error of type StoreProhibited occurred on core  0. Exception was unhandled.
Register dump:
PC : 0x400f360d PS : 0x00060330 A0 : 0x800dbf56 A1 : 0x3ffb7e00
0x400f360d: do_something_to_crash at /home/gus/esp/32/idf/examples/get-started/hello_world/main/./hello_world_main.c:57
(inlined by) inner_dont_crash at /home/gus/esp/32/idf/examples/get-started/hello_world/main/./hello_world_main.c:52
A2 : 0x3ffb136c A3 : 0x00000005 A4 : 0x00000000 A5 : 0x00000000
A6 : 0x00000000 A7 : 0x00000080 A8 : 0x00000000 A9 : 0x3ffb7dd0
A10 : 0x00000003 A11 : 0x00060f23 A12 : 0x00060f20 A13 : 0x3ffba6d0
A14 : 0x00000047 A15 : 0x0000000f SAR : 0x00000019 EXCCAUSE: 0x0000001d
EXCVADDR: 0x00000000 LBEG : 0x4000c46c LEND : 0x4000c477 LCOUNT : 0x00000000

Backtrace: 0x400f360d:0x3ffb7e00 0x400dbf56:0x3ffb7e20 0x400dbf5e:0x3ffb7e40 0x400dbf82:0x3ffb7e60 0x400d071d:0x3ffb7e90
0x400f360d: do_something_to_crash at /home/gus/esp/32/idf/examples/get-started/hello_world/main/./hello_world_main.c:57
(inlined by) inner_dont_crash at /home/gus/esp/32/idf/examples/get-started/hello_world/main/./hello_world_main.c:52
0x400dbf56: still_dont_crash at /home/gus/esp/32/idf/examples/get-started/hello_world/main/./hello_world_main.c:47
0x400dbf5e: dont_crash at /home/gus/esp/32/idf/examples/get-started/hello_world/main/./hello_world_main.c:42
0x400dbf82: app_main at /home/gus/esp/32/idf/examples/get-started/hello_world/main/./hello_world_main.c:33
0x400d071d: main_task at /home/gus/esp/32/idf/components/esp32/./cpu_start.c:254
阅读全文 »

因为HDMI I2S & CODEC I2S 在芯片内部都是同一个I2S,因此CODEC有声音时候,也有声音通过I2S 发送到HDMI,这样取消掉HDMI Audio 检测即可实现HDMI和codec 喇叭同时输出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
diff --git a/services/java/com/android/server/WiredAccessoryManager.java b/services/java/com/android/server/WiredAccessoryManager.java

index c8d3510..2fb231e 100644

--- a/services/java/com/android/server/WiredAccessoryManager.java

+++ b/services/java/com/android/server/WiredAccessoryManager.java

@@ -374,7 +374,7 @@ final class WiredAccessoryManager implements WiredAccessoryCallbacks {

//

// If the kernel does not have an "hdmi_audio" switch, just fall back on the older

// "hdmi" switch instead.

- uei = new UEventInfo(NAME_HDMI_AUDIO, BIT_HDMI_AUDIO, 0);

+/* uei = new UEventInfo(NAME_HDMI_AUDIO, BIT_HDMI_AUDIO, 0);

if (uei.checkSwitchExists()) {

retVal.add(uei);

} else {

@@ -385,7 +385,7 @@ final class WiredAccessoryManager implements WiredAccessoryCallbacks {

Slog.w(TAG, "This kernel does not have HDMI audio support");

}

}
+*/
return retVal;
}

需求
在高版本的SDK中, 第三方应用申请悬浮窗的权限受到了过一步的限制.
除了要在应用中声明对权限的申请:

1
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

还需要打开设置中的权限:

应用可以通过代码检测权限是否已获取:

1
2
3
4
5
AppOpsManager opsMgr = (AppOpsManager)getSystemService(APP_OPS_SERVICE);
int res = opsMgr.checkOp(AppOpsManager.OPSTR_SYSTEM_ALERT_WINDOW, Process.myUid(), getPackageName());
if(res != AppOpsManager.MODE_ALLOWED){
showToast(AppOpsManager.OPSTR_SYSTEM_ALERT_WINDOW + " not allowed");
}

有可能会抛出异常:
1
java.lang.SecurityException: com.android.myapp from uid 10066 not allowed to perform SYSTEM_ALERT_WINDOW

若需要默认打开, 需要修改相关代码
阅读全文 »

2. 模块介绍

2.1. 模块功能介绍

2.1.1. audiocodec 功能

A64 audiocodec 硬件上的实现是通过 I2S 接口与 cpu 进行数据流传输,cpu 通过 apb 总线对audiocodec 进行寄存器配置,软件上采用 alsa-asoc 架构实现,具有以下功能。
(1) 支持多种采样率格式(8khz, 11.025 KHz, 12 KHz, 16 KHz, 22.05 KHz, 24 KHz, 32 KHz, 44.1KHz , 48 KHz, 96KHz, 192KHz);
(2)支持 mono 和 stereo 模式;
(3)支持同时 playback 和 record(全双工模式);
(4)支持 3、4 段耳机插拔检测,hook 键检测,耳机音量加减键定制。

2.1.2. Daudio 功能

(1)支持多种采样率格式(8khz, 11.025 khz, 12 khz, 16 khz, 22.05 khz, 24 khz, 32 khz, 44.1khz , 48 khz, 96khz, 192khz);
(2)支持 mono 和 stereo 模式;
(3)支持同时 playback 和 record(全双工模式);
(4)支持 i2s/pcm

阅读全文 »

迟来的更新。从4月份以来项目中断续在对接好几个共享产品,关于蓝牙BLE设备,通过蓝牙设备之间通信进行使用产品。
开发中也遇到不少问题哈,后面抽时间续篇。写得不好,请各位大神多多指教。

此篇主要介绍一些API操作及一些返回数据结构, 项目已上线。后面抽时间上demo

关于字节

字节(Byte):计算机信息技术用于计量存储容量的一种计量单位,作为一个单位来处理的一个二进制数字串。

其中下发指令或处理数据时都可以应用到

  • 1B(byte,字节)= 8 bit(比特), 相当于一个字符
  • 一个字节能表示的最大的整数就是255
  • 例如: 数据为5d000001be5d理解为6个字节(6B)
阅读全文 »

上篇主要介绍在开发过程中应用到相关API操作。接下来介绍个人在项目开发中应用蓝牙BLE一些事情。

由于时间比较仓促, 有些注释没那么详细。请理解~写的不好欢迎各位大神指。

项目介绍

由于公司近阶段开发的共享产品比较多,有共享充电宝、陪护床等,这里就不一一介绍哈。大部分产品通过蓝牙通讯的。

快捷方便通过扫设备二维码进入小程序使用设备

  • 这里拿最近开发一个产品售卖机,生活中比较常见的一个,例如: 储物柜、格子柜等。
  • 特点: 一个售卖机中有n个小格子(根据产品分类)
    阅读全文 »

关于字节理解

字节(Byte):计算机信息技术用于计量存储容量的一种计量单位,作为一个单位来处理的一个二进制数字串。

其中下发指令或处理数据时都可以应用到

  • 1B(byte,字节)= 8 bit(比特), 相当于一个字符
  • 一个字节能表示的最大的整数就是255
  • 例如: 数据为5d000001be5d理解为6个字节(6B)

ARRAYBUFFER转16进度字符串

1
2
3
4
5
6
7
8
9
10
// ArrayBuffer转16进度字符串示例
function ab2hex(buffer) {
var hexArr = Array.prototype.map.call(
new Uint8Array(buffer),
function(bit) {
return ('00' + bit.toString(16)).slice(-2)
}
)
return hexArr.join('');
}
阅读全文 »