想了解更多关于开源的内容,请访问:51CTO 开源基础软件社区https://ost.51cto.com


搜索物联网平台,登录物联网平台。
创建项目:
创建产品:






连接物理网平台的三个参数:设备名字、产品ID、设备秘钥。//设备名,产品ID,设备秘钥修改为自己所创建产品参数
#define DeviceName "Smart_123"//设备名
#define ProductID "LA57WL612"//产品ID
#define DeviceSceret "9JHiCQ5668uZlVDuQ2ZnQ=="//设备秘钥
用户名和密钥生成:
//服务器IP:{PRODUCT_ID}.iotcloud.tencentdevices.com ---PRODUCT_ID对应产品ID
#define SERVER_IP "LA57WL612.iotcloud.tencentdevices.com"//服务器IP
#define SERVER_PORT 1883 //端口号
//客户端ID:{产品ID}{设备名}
#define ClientID "LA57WL612Smart_123"
//用户名和秘钥可使用秘钥生成工具完成
#define Username "LA57WL612Smart_123;12010126;R05S3;1621619622"
#define Password "9ebe0d0069ac4dd1e9e98664abc9f726c13b5a150190afdfa7b3c12240ff1e73;hmacsha256"//密文
//订阅主题:$thing/down/property/{ProductID}/{DeviceName} ---{ProductID}产品ID,{DeviceName}设备名
#define SET_TOPIC "$thing/down/property/LA57WL612/Smart_123"//订阅

//订阅主题:$thing/down/property/{ProductID}/{DeviceName} ---{ProductID}产品ID,{DeviceName}设备名
#define SET_TOPIC "$thing/down/property/LA57WL612/Smart_123"//订阅
//发布主题:$thing/up/property/{ProductID}/{DeviceName}
#define POST_TOPIC "$thing/up/property/LA57WL612/Smart_123"//发布#define WIFI_NAME "wbyq"//WIFI名
#define WIFI_PASSWORD "asdfghjkl23"//wifi密码
char mqtt_message[200];//上报数据缓存区
int main()
{
int i=0;
u8 stat=0;
u32 time=0;
u16 cnt=0;
float temp;
Beep_Init();//蜂鸣器初始化
Led_Init();//LED初始化
Key_Init();//按键初始化
Usartx_Init(USART1,115200,72);
Usartx_Init(USART3,115200,36);
TIMx_Init(TIM2,72,20000);//通过定时器2辅助串口接收数据,20ms
TIMx_Init(TIM4,72,20000);//通过定时器2辅助串口接收数据,20ms
DS18B20_Init();
// RTC_Init();//RTC初始化
printf("初始化完成\r\n");
while(1)
{
stat=Esp8266_STA_TCPclinet_Init((u8 *)WIFI_NAME,(u8 *)WIFI_PASSWORD,(u8 *)SERVER_IP,SERVER_PORT);
if(stat==0)break;
Delay_Ms(500);
printf("stat=%d\r\n",stat);
}
printf("服务器连接成功\r\n");
while(1)
{
MQTT_Init();
stat=MQTT_Connect(ClientID,Username,Password);
if(stat==0)break;
Delay_Ms(500);
printf("正在连接....\r\n");
}
printf("连接成功\r\n");
stat=MQTT_SubscribeTopic(SET_TOPIC,0,1);
if(stat)printf("订阅失败\r\n");
else printf("订阅成功\r\n");
while(1)
{
if(usart3_flag)
{
for(i=0;i<usart3_cnt;i++)
{
printf("%c",usart3_rx_buff[i]);
}
usart3_cnt=0;
usart3_flag=0;
}
Delay_Ms(1);
time++;
cnt++;
if(time>=5000)
{
time=0;
MQTT_SentHeart();//发送心跳包
}
if(cnt>=1000)
{
cnt=0;
temp=DS18B20_GetTemp()*0.0625;
sprintf(mqtt_message,"{\"method\":\"report\",\"clientToken\":\"123\",\"params\":{\"LED1\":1,\"temp\":%.2f,\"L\":356}}",temp);//温度
MQTT_PublishData(POST_TOPIC,mqtt_message,0);
}
}
}
{
"method":"report",//上报设备属性
"clientToken":"123",//消息配对标识
"timestamp":1212121221, //可不填,默认为系统时间
"params":{
"power_switch":1, //设备属性power_switch
"color":1, //设备属性color
"brightness":32 //设备属性brightness
}
}
本次采用定时器3通道1实现无源蜂蜜器驱动。/***********************************
**
**函数功能:定时器器PWM输出
**TIM3通道引脚:
** 没有重映射 部分重映射 完全重映射
** TIM3_CH1 PA6 PB4 PC6
** TIM3_CH2 PA7 PB5 PC7
**形参:
** chx --要开启的通道(1 --通道1,2--通道2, 3 --表示开启通道1和通道2)
** psc --预分频系数
** ar --重装载值(即周期时间)
** ccr --占空比
** 注意:本示例采用部分重映射功能
**作者:IT_阿水
************************************/
void TIM3_PWM_Out(u8 chx,u16 psc,u16 ar,u16 ccr)
{
/*1.开时钟*/
RCC->APB2PCLKEN|=1<<4;//PB
RCC->APB2PCLKEN|=1<<0;//AFIO
AFIO->RMP_CFG&=~(0x3<<10);
AFIO->RMP_CFG|=0X3<<10;//完全重映像
/*2.配置GPIO*/
GPIOC->PL_CFG&=0xF0FFFFFF;
GPIOC->PL_CFG |=0x0B000000;//通用复用推挽输出模式
/*3.定时器配置*/
RCC->APB1PCLKEN|=1<<1;//TIM3
RCC->APB1PRST|=1<<1;//开启复位时钟
RCC->APB1PRST&=~(1<<1);//取消复位
TIM3->CTRL1|=1<<7;
TIM3->PSC=psc-1;//预分频
TIM3->AR=ar;//重装载值
/*输出PWM配置*/
if(chx&0x1)
{
TIM3->CCMOD1&=~(0x3<<0);//输出
TIM3->CCMOD1|=1<<2;//快速使能
TIM3->CCMOD1|=1<<3;//预加载
TIM3->CCMOD1|=0x6<<4;//PWM0
TIM3->CCDAT1=ccr;//占空比,有效电平时间
TIM3->CCEN|=1<<0;//开启CH1
}
if(chx&1<<1)//CH2
{
TIM3->CCMOD1&=~(0x3<<8);//输出
TIM3->CCMOD1|=1<<10;//快速使能
TIM3->CCMOD1|=1<<11;//预加载
TIM3->CCMOD1|=0x6<<12;//PWM0
TIM3->CCDAT2=ccr;//占空比,有效电平时间
TIM3->CCEN|=1<<4;//开启CH2
}
TIM3->CTRL1|=1<<0;//开启定时器
}
//从DHT11读取一次数据
//temp:温度值-20~60℃
//humi:湿度值5~95%RH
//返回值:0,正常;1,读取失败
u8 DHT11_Read_Data(u8 *temp,u8 *humi)
{
u8 buf[5]={0};
u8 i;
DHT11_Rst();//起始信号
if(DHT11_Check()==0)//应答信号
{
for(i=0;i<5;i++)//读取40位数据
{
buf[i]=DHT11_Read_Byte();
}
if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
{
*humi++=buf[0];
*humi=buf[1];
*temp++=buf[2];
*temp=buf[3];
}
}else return 1;
return 0;
}/*读取RTC时间和日期*/
void RTC_GetDate(RTC_TIME *RTC_Time)
{
u32 date=RTC->DATE;
u32 tsh=RTC->TSH;
RTC_Time->year=((date>>20)&0xf)*10+ ((date>>16)&0xf);
RTC_Time->mon=((date>>12)&0x1)*10+ ((date>>8)&0xf);
RTC_Time->day=((date>>4)&0x3)*10+(date&0xf);
RTC_Time->week=((date>>13)&0x7);
//时间,注意,+-优先级 高于 &的优先级
RTC_Time->hour=((tsh>>20)&0x3)*10+((tsh>>16)&0xf);
RTC_Time->min=((tsh>>12)&0x7)*10+((tsh>>8)&0xf);
RTC_Time->sec=((tsh>>4)&0x7)*10+(tsh&0xf);
// printf("%d/%d/%d -- %d:%d:%d \r\n",RTC_Time->year,RTC_Time->mon,RTC_Time->day, \
RTC_Time->hour,RTC_Time->min,RTC_Time->sec);
}导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,
需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc
我正在寻找用于Rails的优质管理插件。似乎大多数现有的插件/gem(例如“restful_authentication”、“acts_as_authenticated”)都围绕着self注册等展开。但是,我正在寻找一种功能齐全的基于管理/管理角色的解决方案——但不是简单地附加到另一个非基于角色的解决方案。如果我找不到,我想我会自己动手......只是不想重新发明轮子。 最佳答案 RyanBates最近做了两个关于授权的railscast(注意身份验证和授权之间的区别;身份验证检查用户是否如她所说的那样,授权检查用户是否有权访问资源
我正在根据Rakefile中的现有测试文件动态生成测试任务。假设您有各种以模式命名的单元测试文件test_.rb.所以我正在做的是创建一个以“测试”命名空间内的文件名命名的任务。使用下面的代码,我可以用raketest:调用所有测试require'rake/testtask'task:default=>'test:all'namespace:testdodesc"Runalltests"Rake::TestTask.new(:all)do|t|t.test_files=FileList['test_*.rb']endFileList['test_*.rb'].eachdo|task|n
我想要像“嘿那里”这样的东西变成,例如,#316583。我希望将任意长度的字符串“归结”为十六进制颜色。我不知道从哪里开始。我在想,每个字符串的MD5散列都是不同的-但如何将该散列转换为十六进制颜色数字? 最佳答案 你可以只取几位前几位:require'digest/md5'color=Digest::MD5.hexdigest('Mytext')[0..5] 关于ruby-如何使用Ruby基于字母数字字符串生成颜色?,我们在StackOverflow上找到一个类似的问题:
前面一篇关于智能合约翻译文讲到了,是一种计算机程序,既然是程序,那就可以使用程序语言去编写智能合约了。而若想玩区块链上的项目,大部分区块链项目都是开源的,能看得懂智能合约代码,或找出其中的漏洞,那么,学习Solidity这门高级的智能合约语言是有必要的,当然,这都得在公链``````以太坊上,毕竟国内的联盟链有些是不兼容Solidity。Solidity是一种面向对象的高级语言,用于实现智能合约。智能合约是管理以太坊状态下的账户行为的程序。Solidity是运行在以太坊(Ethereum)虚拟机(EVM)上,其语法受到了c++、python、javascript影响。Solidity是静态类型
文章目录1.自动驾驶实战:基于Paddle3D的点云障碍物检测1.1环境信息1.2准备点云数据1.3安装Paddle3D1.4模型训练1.5模型评估1.6模型导出1.7模型部署效果附录show_lidar_pred_on_image.py1.自动驾驶实战:基于Paddle3D的点云障碍物检测项目地址——自动驾驶实战:基于Paddle3D的点云障碍物检测课程地址——自动驾驶感知系统揭秘1.1环境信息硬件信息CPU:2核AI加速卡:v100总显存:16GB总内存:16GB总硬盘:100GB环境配置Python:3.7.4框架信息框架版本:PaddlePaddle2.4.0(项目默认框架版本为2.3
LL库和HAL库简介LL:Low-Layer,底层库HAL:HardwareAbstractionLayer,硬件抽象层库LL库和hal库对比,很精简,这实际上是一个精简的库。LL库的配置选择如下:在STM32CUBEMX中,点击菜单的“ProjectManager”–>“AdvancedSettings”,在下面的界面中选择“AdvancedSettings”,然后在每个模块后面选择使用的库总结:1、如果使用的MCU是小容量的,那么STM32CubeLL将是最佳选择;2、如果结合可移植性和优化,使用STM32CubeHAL并使用特定的优化实现替换一些调用,可保持最大的可移植性。另外HAL和L