初出茅庐的小李第19篇博客之广和通G510模块接入机智云平台
2020年5月1日劳动节
为什么要说一下这个日期,因为我上一次玩(学)G510模组是去年2019年5月1日,由于种种原因吧,一直也没有机会再次操作,而且不幸的一件事情就是,我还把上次搞的代码搞丢了,也没有备份,当时也是比这大神的分享搞的,https://blog.csdn.net/gizwits_csdn/article/details/79569061,遇到了一些问题,也解决了,但是感觉还是有点问题,今天可能是机缘巧合我又在相似的时间做了相同的事情。
为什么要用G510呢
因为我觉得既然是远程的控制就因该能实现真正意义上的远程,WiFi环境下的远程也不是不可以,但是我想的是要把它能做成一个差不多的产品去打磨,我们学技术的最终不是要服务生活吗?刚好我看到亲戚家水泵机房的控制可以尝试用G510去改造,先简单介绍一下我的想法吧
- 要实现真正意义上的远程控制
- 要具备控制三相交流电机的能力
- 要比较的可靠和稳定
- 要有比较安全的措施
- 即使是达不到大规模生产也要用PCB制成板子
- 功能上实现8路继电器的控制,每一路的有效工作时间,具备手动和自动两种模式。
步入正题,开始接入机智云
首先我们要先有这个模块,我的模块是淘宝上一个和机智云合作的公司买的,有两种版本,其中一个版本是透传的版本,一个是AT标准版本,我买的是AT标准版本,这个其实有一个问题,就是AT版本无法直接接入机智云(我说的是无法用那种无脑的方式接入),我们需要下载机智云官方的固件。如何下载官方哪里有很多资料,可以自行去找一下,需要注意的是,我们通信的串口并不是,下载程序的串口。
我选择是最简单的一种模式就是利用MCU+通讯模组的方案移植自动生成的代码工程到自己的开发板工程,我的开发版是直接使用的正点原子开发板(我可不是有钱,板子是我嘉立创参加活动白嫖的,我之所以用开发板是因为我没有其他的啊,对主要是因为我穷)
创建数据点,自动生成对应平台的代码
下载后解压,把下面的Gizwits 和Utils 文件夹复制到自己的工程里
其实这个工程直接可以打开,但是是用hal库写的,对hal不是很熟悉,因为原来的工程是标准库,所以选择改少的。
除此之外我们还要粘贴两个文件夹一个TIMER和一个USART3两个分别是定时器的配置和串口3的配置,通信用串口3调试用串口1。
这个是参考 唯恋殊雨 博主的博客整理的,一个实现了ms的定时中断
一个实现了串口的初始化配置
#include "timer.h"
#include "gizwits_product.h"//
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK战舰STM32开发板
//定时器 驱动代码
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2012/9/3
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2009-2019
//All rights reserved
// //通用定时器3中断初始化
//这里时钟选择为APB1的2倍,而APB1为36M
//arr:自动重装值。
//psc:时钟预分频数
//这里使用的是定时器3!
void TIM3_Int_Init(u16 arr,u16 psc)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能//定时器TIM3初始化TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断//中断优先级NVIC设置NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器TIM_Cmd(TIM3, ENABLE); //使能TIMx
}
//定时器3中断服务程序
void TIM3_IRQHandler(void) //TIM3中断
{if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否{TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx更新中断标志 gizTimerMs();}
}
#include "usart3.h"
#include "gizwits_product.h"//
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK STM32开发板
//串口3驱动代码
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2014/3/29
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2009-2019
//All rights reserved
// //串口3中断服务函数
void USART3_IRQHandler(void)
{u8 res; if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//接收到数据{ res =USART_ReceiveData(USART3); gizPutData(&res, 1);//数据写入到缓冲区}
} //初始化IO 串口3
//pclk1:PCLK1时钟频率(Mhz)
//bound:波特率
void usart3_init(u32 bound)
{ NVIC_InitTypeDef NVIC_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //GPIOB时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); //串口3时钟使能USART_DeInit(USART3); //复位串口3//USART3_TX PB10GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PB10GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化PB10//USART3_RX PB11GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化PB11USART_InitStructure.USART_BaudRate = bound; //波特率一般设置为9600;USART_InitStructure.USART_WordLength = USART_WordLength_8b; //字长为8位数据格式USART_InitStructure.USART_StopBits = USART_StopBits_1; //一个停止位USART_InitStructure.USART_Parity = USART_Parity_No; //无奇偶校验位USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式USART_Init(USART3, &USART_InitStructure); //初始化串口3USART_Cmd(USART3, ENABLE); //使能串口 //使能接收中断USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); //开启中断 //设置中断优先级NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//抢占优先级3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器}
把添加进来的文件进行修改
这里要包含工程所需的文件头
把没有用的函数我们给他删除或者屏蔽
在user handle里面填入自己要处理的代码
屏蔽没有用到的或者已经被从新写过的函数,并修改串口的代码
/*** @brief Retargets the C library printf function to the USART.* @param None* @retval None
// */
//PUTCHAR_PROTOTYPE
//{// /* Place your implementation of fputc here */
// /* e.g. write a character to the USART1 and Loop until the end of transmission */
// HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
//
// return ch;
//}/*** @brief Period elapsed callback in non blocking mode * @param htim : TIM handle* @retval None*/
//void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
//{// if(htim==&htim2)
// {// keyHandle((keysTypedef_t *)&keys);
// gizTimerMs();
// }
//}/**
* @brief Timer TIM3 init function* @param none
* @return none
*/
//void timerInit(void)
//{// HAL_TIM_Base_Start_IT(&htim2);
//}/*** @brief This function handles USART IDLE interrupt.*/
//void HAL_UART_RxCpltCallback(UART_HandleTypeDef*UartHandle)
//{
// if(UartHandle->Instance == USART2)
// {
// gizPutData((uint8_t *)&aRxBuffer, 1);// HAL_UART_Receive_IT(&huart2, (uint8_t *)&aRxBuffer, 1);//开启下一次接收中断
// }
//} /**
* @brief USART init function* Serial communication between WiFi modules and device MCU
* @param none
* @return none
*/
//void uartInit(void)
//{// HAL_UART_Receive_IT(&huart2, (uint8_t *)&aRxBuffer, 1);//开启下一次接收中断
//}/**
* @brief Serial port write operation, send data to WiFi module
*
* @param buf : buf address
* @param len : buf length
*
* @return : Return effective data length;-1,return failure
*/
int32_t uartWrite(uint8_t *buf, uint32_t len)
{uint8_t crc[1] = {0x55};uint32_t i = 0;if(NULL == buf){return -1;}for(i=0; i<len; i++){USART_SendData(USART3,buf[i]);while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕if(i >=2 && buf[i] == 0xFF){USART_SendData(USART3,0x55);while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕 }}#ifdef PROTOCOL_DEBUGGIZWITS_LOG("MCU2WiFi[%4d:%4d]: ", gizGetTimerCount(), len);for(i=0; i<len; i++){GIZWITS_LOG("%02x ", buf[i]);if(i >=2 && buf[i] == 0xFF){GIZWITS_LOG("%02x ", 0x55);}}GIZWITS_LOG("\n");
#endifreturn len;
}
最后再main函数重新写这连两个函数
最后再while(1)里调用自己写的函数和更新数据点,官方建议加个一分钟10次的频率延时,保证数据下发和上传进行完毕。
编译修改错误后可以下载调试。
这里其实有个坑
我们用的是G510模组,它的绑定方法需要扫描二维码才可以绑定,这个二维码好多情况下也不管用,我用的旧版本有的时候可以有的时候不可以,但是只要模块能上线,电脑上是可以看到的,我发新有的时候反应的确实比较慢,我决定上线的时间非常长。
绑定好后就可以用机智云的app控制自己的单片机了
我自己实验的效果链接https://www.bilibili.com/video/BV1yg4y1z7Fy
记录学习的过程,本身就是一个提高,不断学习,不断进步,日积月累向一个合格的工程师方向努力(感觉这个时间会很久)
初出茅庐的小李第19篇博客之广和通G510模块接入机智云平台相关推荐
- 初出茅庐的小李第3篇博客《5G物联网及NB-IoT技术详解》读书笔记1
初出茅庐的小李第3篇博客 <5G物联网及NB-IoT技术详解>读书笔记1 在Mculover666那里白嫖了一本书,不要问我咋白嫖的,我也不知道- 为什么要写这样的笔记? 因为我白嫖的时候 ...
- 初出茅庐的小李第113篇博客项目笔记之机智云智能浇花器实战(2)-基础Demo实现
初出茅庐的小李第112篇博客项目笔记之机智云智能浇花器实战(1)-基础Demo实现 接(1) 继电器实现 继电器原理图 继电器采用的是5V继电器,控制端是RELAY-1 继电器代码实现 #includ ...
- 初出茅庐的小李第39篇博客之转载一篇有关unistd.h的介绍文章
转载一篇文章 mask一下好找 unistd.h在unix中类似于window中的windows.h! #ifdef WIN32 #include <windows.h> #else #i ...
- 初出茅庐的小李第114篇博客项目笔记之机智云智能浇花器实战(3)-基础Demo实现
机智云智能浇花器实战(3)-基础Demo实现 链接:机智云智能浇花器实战(2)-基础Demo实现 BH1750光照传感器原理图 BH1750传感器代码 #include "bh1750.h& ...
- 初出茅庐的小李第73篇博客之offsetof(type, member-designator)使用
offsetof(type, member-designator) 这是一个宏定义包含在<stddef.h>里,它的作用是用来计算一个结构成员相对于结构开头的字节偏移量. 说到这里我先来补 ...
- 初出茅庐的小李第86篇博客之Modbus协议总结
Modbus协议来源 Modbus协议的由来 Mod,取自英文单词" Modicon",Modicon 中文翻译为莫迪康,是美国一家自动化公司的名字,现在这家公司被法国的施耐德电气 ...
- 初出茅庐的小李第59篇博客之测试Modbus协议的继电器
1, Modbus RTU指令详解 发送: FF 05 00 00 FF 00 99 E4 字段 含义 注释 FF 设备地址 范围1-255,默认255 05 功能码 写单个线圈 00 00 继电器地 ...
- 初出茅庐的小李第36篇博客之读取旋转编码器正反转状态(arduino uno 测试)
旋转编码器的引脚 CLK(A相) DATA(B相) SWITCH VCC GND 工作原理 旋转编码器的工作原理以及如何在Arduino中使用 https://www.yiboard.com/thre ...
- 初出茅庐的小李第115篇博客之智能浇花器实战分享(4)
机智云智能浇花器实战分享(下) 机智云平台如何创建数据点: 机智云官方网站:机智云|物联网云平台,AIoT开发云平台,Aiot软件开发平台.AIoT开发云平台.工业物联网解决方案 (gizwits.c ...
最新文章
- phpstorm 2017.1激活
- How to not show unnecessary zeros when given integers but still have float answers when needed
- Centos7修改主机名
- php禁用cookie后session设置方法分析
- oracle 增加间隔分区,oracle分区表之间隔分区(oracle 11g) - 漫兮网
- 机器学习在美团配送系统的实践:用技术还原真实世界
- c++中vector用法(涵盖算法题中知识点)
- qint64转字符串
- 教育中的“产出/产能平衡”原则
- C# 提取字符串中的数字,去除字符串中的重复字符逗号分隔
- 分布式消息系统jafka快速起步(转)
- 从用户端到后台系统,严选分销教会我这些事
- Java 邮政EMS快递面打印实现 笔记
- 删除2345输入法和智能云输入法这两个狗屁玩意的注册表
- 计算机怎么移动游戏,Uplay游戏怎么搬移 Uplay游戏搬移方法介绍
- pdf和word等文档添加水印
- unet医学肺部ct图分割简单记录
- 和府捞面全新品牌“小面小酒”在福州开业,下一批新店落地天津、淄博
- Python3-豆瓣电影影片差评和影片封面照片的爬取
- ProtoBuf 官方文档翻译