写点什么

开源一夏 | STM32 对接涂鸦 wifi 模块项目(智能插座 - 开源)

作者:矜辰所致
  • 2022 年 8 月 22 日
    江苏
  • 本文字数:4051 字

    阅读完需:约 13 分钟

开源一夏 | STM32对接涂鸦wifi模块项目(智能插座-开源)
应项目需求,客户需要对接涂鸦平台,从了解平台到样品实际落地,还是挺方便的,做过的一个项目,人体感应智能插座项目,对接涂鸦云 :硬件平台:STM32F103WIFI模块: 涂鸦WiFi(型号见文章说明)云平台:涂鸦云原理图和程序都开源 ... by  矜辰所致
复制代码


前言

本项目从了解平台到样品实际落地,还是挺方便的,这得得益于涂鸦的 SDK 和相关资料,


本文意在于对本次项目做个笔记,方便以后再次用到,也给大家一个参考。


最后所有的资料原理图和程序都开源。

一、如何选择合适的涂鸦 wifi 模块?

第一步,在这个问题上,没有接触过涂鸦的朋友或许会犯迷糊。


本次的项目简单来说是做一个人体感应控制器,其实本来公司和涂鸦商务是有合作的,刚开始,由于手头事情也多,涂鸦也不是很了解,我还直接在群里面提需求,然后希望对方给出一个推荐模块(因为自己去涂鸦官网上面看过,模块实在是太多了= =! 单从一个工程师的角度来看,哪一个都能用,但是要找到合适自己的,还真有点难以判断…… ),对面需要我给需求,因为功能实在是不复杂,几句话就说完了,但是对面还是觉得没有一个明确的项目需求,后来通过电话沟通,才明白一些。如果需要专门的涂鸦客服跟进,那么至少也得是一个“值得”的项目,而且这样沟通来沟通去,时间也会浪费,对方建议我自己去涂鸦平台看看资料,通过标准的流程新建产品。


没办法,没法偷懒了(按照以前开发的流程,厂家推荐一款 wifi 模块,大部分时间会花在写模块驱动,测试上面),只能自己去看看平台操作流程,去看资料,然后直接试着操作起来,之后才发现其实涂鸦生态做得挺完善的,只要熟悉了整套系统,哪个部分都不需要画太多时间,可能涂鸦项目画 PCB 需要的时间才是最多的了。


因为 wifi 模块驱动,手机 APP 涂鸦都做好了……而且,你需要做什么产品,平台会推荐你最合适的 wifi 模块,前提是你得在 IoT 平台上创建产品。


所以使用那个型号的涂鸦 wifi 模块不需要自己根据每一个型号的资料去选择,进入涂鸦 IoT 平台,注册账号后,创建你需要设计的产品,配置好自己产品功能后,平台自己会给你推荐合适的 wifi 模块。

二、涂鸦 IoT 平台操作

2.1 创建产品

接下来就来讲解一下涂鸦 IoT 平台的操作,账号肯定得注册一个,然后在产品栏目,找到创建产品,如下图(图中因为以前创建过,所以有一个存在产品):



点进去以后,界面如下,可以看到涂鸦已经给产品分好了类,而且基本上物联网领域能关联的设备都包含了,在这个里面选择你的产品或者方案对于或者相似的产品:



我们这里点击一个插座看看:


2.2 添加标准功能

点击创建产品,会让你给产品方案取个名字,然后接下来会让你配置功能,其中会有几个必选功能,因为作为智能插座,几个必须具备的基础功能他会给先定好,其他的额外功能根据自己的需求去选择:



选择好以后如下图:


2.3 APP 界面设置

接下来就是设计自己产品 APP 上的界面了,在上图中点击下一步设计面板,我这里随便选了一个:



通过手机扫描上面的二维码,可以看到刚才创建的产品:


2.4 ☆硬件选择☆

根据步骤提示,接下来是就是选择硬件了:



我们随便选择,点第一个模块:



点击生成固件,然后就可以下单买样品了,功能按照我们自己的选择配置会在固件里面设置好,只需要自己画个电路图:



硬件设计也可以点击参考电路设计,也会根据你选择的模块给出参考电路图:


2.5 其他说明

完成以上设置后,基本上模块选型就完成了,后面的第 4 步和第 5 步可以暂时不管:



如果是做一个上面描述的插座产品,工程师做的只是需要在 IOT 平台做一下选择配置,根据自己设定的功能引脚设计电路图,最后焊接完成后,基本上电配好网,直接手机控制插座开关了,app 也能实时显示插座开关状态


上图的示例是创建了一个插座的新品,而且是零代码开发的,不存在 SDK 移植之类的,因为不需要,简单标准的功能涂鸦可以直接做好固件程序,根据你配置好的功能采购的模块就直接上电可以用,无需另加 MCU。


我们回头来看一下产品的生产管理,可以看到除了我以前创建的产品,多了一个我们刚才创建的插座,除了这些标准的产品,在遇到一些定制化项目产品不是那么常规标准的情况下,就得使用通用模块进行 SDK 移植了:



在上图中的第二个名为 demo 产品,人体红外传感器中选择的功能如下:



除了人感基本的有无人信息,还有继电器控制开关,还有预约功能,倒计时,其实还可以自己加很多功能,只需要注意增加功能的数据类型,属性,是为了后面自己写程序的时候不会出错。


在硬件开发部分,涂鸦推荐的模块为 TYWE3S Wi-Fi 模组(当时选完功能后就只有这么一个模块推荐),因为这个是需要移植 SDK 的,需要自己外带一个 MCU 做处理,所以这个界面中,有 下载资料 这么一栏,主要是 MCU SDK 下载:



如果是做一个需要移植 SDK 的产品,那除了电路图设计,还得根据自己选择的 MCU 型号移植一下官方的 SDK 包,我们这里记录的是使用 STM32F103C8T6 芯片进行的移植操作。

三、SDK 移植

下载好 SDK 包,打开后里面包含的文件如下图:



SDK 的移植,官方有详细视频教程:涂鸦官方SDK包移植教程


官方的文档教程:涂鸦官方SDK包移植文档说明


我这里就把自己移植的过程作记录一遍, 我个人整体来说,没有详细的一点一点去看文档和视频,只是大概浏览一下,然后几个大步骤注意,都是修改编译,然后出了 error 以后找到问题所在,去修改。

3.1 添加对应的文件和头文件

在需要使用到 wifi 功能的文件中包含一下 wifi.h 文件,#include "wifi.h",主函数中肯定需要,其他地方需不需要没必要特意去看,用到的时候没包含报错了,我们再包含也不迟


3.2 添加 PRODUCT_KEY 定义

PRODUCT_KEY 就是我们在 IoT 平台创建的产品 ID,如下图:



/******************************************************************************                       1:修改产品信息******************************************************************************/#define PRODUCT_KEY "v2psrivahslotbha"    //开发平台创建产品后生成的16位字符产品唯一标识
#define MCU_VER "1.0.0" //用户的软件版本,用于MCU固件升级,MCU升级版本需修改
/* 模块工作方式选择,只能三选一,推荐使用防误触模式 */#define CONFIG_MODE CONFIG_MODE_DEFAULT //默认工作模式
复制代码

3.3 调用 wifi_protocol_init 函数

在 MCU 串口及其他外设初始化后调用 mcu_api.c 文件中的 wifi_protocol_init() 函数。我样品使用的是串口 3 和涂鸦 wifi 连接的,然后波特率为 9600:


3.4 串口收发处理

串口发送:


将 MCU 串口单字节发送函数填入 protocol.c 文件中 uart_transmit_output 函数内,并删除 #error。


就是我们使用的 MCU,哪个串口连接的涂鸦 wifi,自己把此串口发送一个字节的函数放在uart_transmit_output 函数内:



串口接收:


在串口接收中断服务函数里面调用 mcu_api.c 文件内的 uart_receive_input 函数,并将接收到的字符作为参数传入。


3.5 调用 wifi_uart_service 函数

单片机进入 while(1) 循环后调用 mcu_api.c 文件内的 wifi_uart_service() 函数。


3.6 设备上电初始状态上报

修改 protocol.c 中的函数 all_data_update(void) ,此函数是产品上电状态,这个可以根据自己的意愿上报初始状态:



那么这些 DP 点在哪里看到定义呢,是在 protocol.h 文件中有定义,这也是和我们当时自己设置的产品功能一一对应的:


3.7 完善下发操作

完成每个下发 DP 点自己需要的操作,在 protocol.c 文件中,每个可下发的 DP 点,都有一个单独下发数据处理函数。格式为 dp_download_xxx_handle(),比如我们进行开关控制继电器动作:


3.8 其他细节处理

人感的状态上报我是放在主函数中判断:



在官方文档中,进行到这一步,还需要配网指示灯的添加,我这里没有用到,因为我选择的是 wifi 模块自动处理按键和 LED 指示,这是在当时选择 wifi 模块的时候的一个可选择的功能,我选择的是 wifi 模块自动控制,使用的是官方推荐的参考电路,参考电路如下:



但是记住,模块自动控制的话,需要在 protocol.h 中定义WIFI_CONTROL_SELF_MODE,默认是注销的:



完成以上步骤,基本移植完成,但是还是有些地方需要修改,但是这些修改都是可以根据编译后的错误,找到错误位置进行修改,每个错误的地方基本都有注释说明,很简单的。最后直到编译完全通过,wifi 模块的驱动就已经完成了。

四、配网操作测试

样品使用的配网方式是 wifi 模块自动处理 方式,默认是长按按键 5 S,切换配网方式(AP 模式 和 Smart 模式相互切换)


Smart 模式(快闪):操作简便,通常以指示灯快闪做指示。AP 模式(慢闪):配网可靠,通常以指示灯慢闪做指示。
复制代码


配网需要使用到涂鸦 app,我们这里使用 Smart 模式延时一下具体步骤:


1、 在 app 中点击右上角加号,选择你所需要的添加的设备,我这里选择的是下图中的第一个,wifi 类型的传感器:



2、 选好设备以后,在弹出的页面选择你所需要连接的 wifi 名字和密码:



3、 到下一步,注意文字提示,需要保证 wifi 模块处于对应的配网状态下:



4、 等待设备自动配网,需要一点时间,我这边每次设置大概在 30S 左右就能连接上:



5、 添加成功提示:



6、 最后就可以测试,根据自己定义的几个功能,有人无人,状态变化,然后通过界面上的按钮,可以操作继电器通断,实际测试下来功能完全 OK,整体来说还是达到的基本的效果:



整个过程基本上没有遇到疑难杂症之类的问题,不得不说,涂鸦的生态还是做得挺好的!!

五、硬件原理图

因为许多小伙伴找我要原理图和,所以干脆这里就把重要部分原理图贴上。


硬件部分主要有几个重要点:


1、供电部分,220V 转 5V/3.3V;


2、控制电源开关部分,使用继电器控制;


3、WiFi 模块部分;


4、STM32 部分;


本部分不上原理图,因为最小系统都一样,可参考:


STM32 非接触测温测温传感器 项目记录(ModbusRTU协议)中的 STM32 部分原理图。


5、人体感应部分。(本部分不上原理图,方案很多,比如最简单的 BISS001)

5.1 涂鸦模块部分

涂鸦模块的型号是根据上文提到的如何选择涂鸦模块操作,最后涂鸦官方给出的:


5.2 供电部分

供电部分用了电源模块:


5.3 控制部分

控制部分使用继电器,欧姆龙的 G5Q-14:



结语(原理图源码链接)


最后上一下项目工程资料链接:https://gitee.com/qzh_projects/Demos/tree/master/

发布于: 刚刚阅读数: 4
用户头像

矜辰所致

关注

不浮夸,不将就,认真对待学知识的我们! 2022.08.02 加入

不浮夸,不将就,认真对待学知识的我们,矜辰所致,金石为开! 为了活下去的嵌入式工程师,画画板子,敲敲代码,玩玩RTOS,搞搞Linux ...

评论 (1 条评论)

发布
用户头像
还是老样子,看文章,打开目录看整体结构,阅读更加方便!
刚刚 · 江苏
回复
没有更多了
开源一夏 | STM32对接涂鸦wifi模块项目(智能插座-开源)_开源_矜辰所致_InfoQ写作社区