abcd
abcd
我只是个路过的老年人~

注册于 2 年前

回答
45
文章
6
关注者
1

看下 wm_ble_server_api_demo. c, 里面实现了 server 的例子, 在这个结构体里面定义了 UUID 以及属性以及对应的回调函数, 可以根据自己的应用情况加减属性以及修改 UUID, 如果是读写属性的, 收到相关事件后会直接调用 gatt_svr_chr_demo_access_func 这个回调函数, 在里面实现自己的操作, 如果是 notify, 直接用 tls_ble_server_demo_api_send_msg 接口发送数据就可以了. image. png

image. png

image. png

1. There is currently no W861 development board available.
2. The reason for NAK prompt is that in most cases, due to unstable serial port connections, some USB to serial port boards do not support high baud rates. If this error persists, you can try reducing the download baud rate.
3. The W806 chip does not have Wi-Fi function.
4. Unable to read firmware file from device.

没有产生广播事件指的是用手机收不到设备这个广播吗? 手机端用蓝牙助手类的 APP 是可以看到这个设备广播的信息的, 名字应该是 WM-XXXX 之类的.

使用的是 W800 吗, 芯片的具体丝印是什么. 感觉跟发射功率没关系, 发射功率都是一样的设置, 要不行都不行. 发射功率的接口是 tls_ble_set_tx_power, 参数 power_type 写 11 就行, 默认 index 是 2, 对应 4dB. 我觉得可以用不行的芯片刷个标准固件执行下 AT+WSCAN 扫描指令, 看下返回结果里路由器的信号强度是什么样的, 比如离得近的路由器的信号强度能到多少.

订阅主题, demo 里有啊, 在 mqtt_demo_init 里连接 mqtt 成功后, 调用 mqtt_subscribe 接口来订阅自己的主题, 这样云端有这个主题的消息时, 会主动下发给订阅该主题的设备. 设备收到云端发来的消息时, 在循环里 mqtt_demo_loop 就会能解析到这个消息, MQTTParseMessageType, mqtt_parse_pub_topic, mqtt_parse_publish_msg, 然后做自己的处理就行了, demo 里就是收到消息后打印了出来, 并回传了一条消息.

粗略看了你的代码下, 有如下几个问题: 1, OutDQ0 和 OutDQ1 定义错误, 输出高低电平并不是通过设置上下拉来实现的, tls_gpio_cfg 设置为输出后, 还需要调用 tls_gpio_write 来设置输出高, 低电平, 另外我记得电路外部是需要加上拉电阻的, 所以这里应该配置为上拉输出; 2, 如果没有外部电阻的情况下, IpuDQ 配置为上拉, 组好还是有外部上拉电阻, 毕竟内部是个弱上拉; 3, 延时混乱, tls_os_time_delay () 接口实现的延时单位是系统的 1 个 tick, 如果 configTICK_RATE_HZ 设置的是 1000, 那就是最小延时时间只能到 1ms, 想要实现 us 级别的延时, 就需要用自习用 for 循环 + __NOP () ; 来实际测量实现了, 或者用楼上的方式试下行不行.
至于具体时序网上参考程序很多, 主要是 IO 的操作和延时弄对了就不会有大问题, 如果 IO 操作不清楚的, 可以参考 wm_gpio_demo. c 程序. 开一个帖子就行了.

The w80x chip did not consider the CAN interface in its design.

如果是 w800 做 SPI 主机, 就参考 demo 目录下 wm_master_spi_demo. c.

tick 最小改到 1000, 不能再小了. 关于延时, 如果延时时间大于 tick 值, 可以用 tls_os_time_delay (N * tick) 来实现, 如果想延时更小的时间, 可以自己写个 for 循环调用__NOP () ; 接口来延时, 具体循环多少次可以用个 IOpin 拉高拉低, 用示波器或者逻辑分析仪来测量延时时间长短.

w800 做 softap 时不会去连接路由器, 它的作用并不是网络覆盖范围变大, 而是某些情况下需要起一个热点创造一个局域网环境来通信.

g_crypto_ctx. gpsec_lock 定义的是一个互斥锁, 在 SDK 的初始化时有调用 tls_crypto_init, 在这里创建了该信号量, 初始值是 1, 所以在没有其他地方用到该模块时, 调用 tls_os_sem_acquire (g_crypto_ctx. gpsec_lock, 0) ; 会立即返回接着往下执行. 如果有其他地方调用了就会等待, 直到能获取到信号量才能接着往下执行, 起到一个互斥锁的功能. 调用 tls_os_sem_acquire 获取, 信号量的个数会减一, 调用 tls_os_sem_release 释放, 信号量的个数会加一, 这两个接口是成对使用的. 在使用信号量实现互斥锁的功能时, 创建信号量时初始值会设置为 1, 这样有一个地方获取了锁的使用权后, 其他地方就需要等待这里释放了才能获取, 起到防止出现同一个模块或者变量或者接口被同时操作的情况. 并不是一个物理信号.

可以看下技术文档下面的 WM_W800_SDK_DEMO 使用指导_V1. 5. pdf , 需要先打开联网和 mqtt 的 demo 宏, 编译固件, 然后需要先发送联网的命令, 联网成功后再发送 mqtt 的命令. 但是 demo 中的服务器是不可用的, 需要换成自己的服务器地址, 端口号, client id 等相关的参数. 或者用 mqtt. isme. fun: 1883 试下. https: //www. winnermicro. com/html/1/156/158/558. html

为什么用 w800 给自己的串口发送 AT 指令的? AT 指令是上位机通过串口控制 W800 工作的, 如果是用代码, 那就是在 W800 上做二次开发, 直接调用相关的接口来实现功能就可以了, 不需要用到 AT 指令. 如果用自己的 APP 蓝牙配网, 可以参考官网的 APP 代码把蓝牙配网的功能加到自己的 APP 中, 这样就不需要改动 W800 的代码了. 也可以开发自己的配网协议, 只是需要在 W800 端配套实现对应的协议.

旋转编码器就是 2~3 个普通的 IO 口, 用 W800 的 GPIO 设置为输入模式连接就可以. 剩下的就是读 GPIO 的状态, 然后根据旋转编码器的时序来判断旋转方向.

发布
问题