【stm32+ESP01s连接到阿里云物联网飞燕平台】_stm32 esp01s 阿里云(1)

} Motor;

/*motor.c*/
#define STEPS_PER_REVOLUTION 4096

const uint8_t Steps[8] = {0x01, 0x03, 0x02, 0x06, 0x04, 0x0C, 0x08, 0x09};

void setup_gpio_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}

void motor_step(Motor* motor)
{
if (motor->direction != STOPPED)
{
if (motor->direction == FORWARD)
{
GPIO_Write(GPIOA, Steps[motor->step]);
motor->step = (motor->step + 1) % 8;
}
else
{ // BACKWARD
GPIO_Write(GPIOA, Steps[motor->step]);
motor->step = (motor->step - 1 + 8) % 8;
}
delay_ms(motor->speed);
}
else
{
GPIO_Write(GPIOA, 0);
}
}

void motor_rotate(Motor* motor, MotorDirection direction, int degrees, int speed)
{
motor->direction = direction;
motor->speed = speed;

int steps = (degrees * STEPS_PER_REVOLUTION) / 360;
for(int i = 0; i < steps; i++)
{
motor_step(motor);
}

motor->direction = STOPPED;
}


#### 光敏传感器



void ADC2_Init(void)
{

GPIO_InitTypeDef ADC_GPIO_InitStructure;
ADC_InitTypeDef ADC_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2, ENABLE);

RCC_ADCCLKConfig(RCC_PCLK2_Div6);

// 初始化 PA5 用于采集
ADC_GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
ADC_GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_Init(GPIOA, &ADC_GPIO_InitStructure);

// 初始化ADC2
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC2, &ADC_InitStructure);

// ADC2, 通道5
ADC_RegularChannelConfig(ADC2, ADC_Channel_5, 1, ADC_SampleTime_55Cycles5);

ADC_Cmd(ADC2, ENABLE);

ADC_ResetCalibration(ADC2);

while(ADC_GetResetCalibrationStatus(ADC2));

ADC_StartCalibration(ADC2);

while(ADC_GetCalibrationStatus(ADC2));

ADC_SoftwareStartConvCmd(ADC2, ENABLE);

}

float ADC2_GetValue(void)
{
uint32_t Value = 0;
float ret = 0.0;

for(uint8_t i = 0; i < 30; i++)
{
ADC_SoftwareStartConvCmd(ADC2, ENABLE);
while(!ADC_GetFlagStatus(ADC2, ADC_FLAG_EOC));

Value += ADC_GetConversionValue(ADC2);
}

Value /= 30;
ret = 30.303 * (3.3 - Value * (3.3/4095));

return ret;
}


#### 解包


这个是因为阿里云下发数据的格式是JSON格式,我们利用了stm32的jansson库对数据进行解析



int parse_LED_value(char* str)
{
json_error_t error;
json_t *root, *params, *led;
const char *json_start = strstr(str, “{“method”:“thing.service.property.set””);

if (!json_start) {
    // 错误处理:找不到JSON的开始
    return -1;
}

root = json\_loads(json_start, 0, &error);
if (!root) {
    // 错误处理:无法解析JSON
    return -2;
}

params = json\_object\_get(root, "params");
if (!params) {
    // 错误处理:'params'对象不存在
    json\_decref(root);
    return -3;
}

led = json\_object\_get(params, "switch");
if (!json\_is\_integer(led)) {
    // 错误处理:'LED'不存在,或者其值不是一个整数
    json\_decref(root);
    return -4;
}

// 获取'LED'的值
int led_value = json\_integer\_value(led);

// 清理解析后的JSON对象
json\_decref(root);

return led_value;

}


### 3.处理数据


我是在main函数中进行数据处理的:



lux = ADC2_GetValue();//光照传感器
if(USART3_RX_STA&0x8000)
{
USART3_RX_BUF[USART3_RX_STA&0x7FFF]=0; //添加结束符
printf(“%s”,USART3_RX_BUF);
if(USART3_RX_STA&0x8000)
{
led_value = parse_LED_value((char*)USART3_RX_BUF);
printf(“LED= %d\r\n”, led_value);
if(led_value == 0)
{
Motor_Flag=0;
LED = 1;
a=0;
}
if(led_value == 1)
{
Motor_Flag=1;
LED = 0;
a=1;
}
}
memset(USART3_RX_BUF,0,sizeof(USART3_RX_BUF)); //清空接收缓冲区
USART3_RX_STA=0; //重置接收状态
}

if(Motor_Flag1 || (int)lux<45)
{if(a
1)
{
delay_ms(50);
Motor motor = {STOPPED, 0, 0};
motor_rotate(&motor, FORWARD, 180, 1);
Motor_Flag=2;
a=0;
}
}
else if(Motor_Flag0 || (int)lux >70)
{if(a
0)
{
delay_ms(50);
Motor motor = {STOPPED, 0, 0};
motor_rotate(&motor, BACKWARD, 90, 1);
Motor_Flag=2; a=1;
}
}
DHT11_Read_Data(&temp,&humi);//温湿度传感器读取数据




---


## 最后

**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。**

**因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/5cdd1cfdd531ca5547ead418ff1c7be5.png)

![img](https://img-blog.csdnimg.cn/img_convert/25ad6b78f3aa814376249c595c61dba6.jpeg)

![img](https://img-blog.csdnimg.cn/img_convert/2a4559579513f7c573d1fed2a1c129ed.png)

 ![img](https://img-blog.csdnimg.cn/img_convert/99342f8f1c8652a260c52c557e294d48.png)

![img](https://img-blog.csdnimg.cn/img_convert/e33a4c5b05695c64319b9ce5668b046c.png)

![img](https://img-blog.csdnimg.cn/img_convert/445a01b6aeaa922cd67b60ccdf17d36a.png)

![](https://img-blog.csdnimg.cn/img_convert/663926c7031cf60d55dc946be35e9d3e.png)

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!


vRsYVA-1715608396968)]

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!


  • 25
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
物联网是未来的发展方向之一,利用物联网技术可以实现设备之间的互联和信息的传输,而实际开发物联网项目则需要使用具体的硬件平台和云平台。本文简要介绍基于STM32和ESP8266 WiFi技术的物联网项目实战开发,主要包括数据上传和阿里云物联网平台代码程序的制作。 首先,为了实现数据上传功能,必须使用具有网络连接能力的硬件平台,例如ESP8266 WiFi,它可以实现通过WiFi无线网络连接至互联网,并实现数据上传到云平台的功能。而STM32则主要作为控制器来控制数据的采集、处理和上传。 其次,为了使数据上传到云平台,必须选择一个合适的云平台,此处我们选择阿里云物联网平台。该平台是国内领先的物联网平台,提供了完善的物联网解决方案和数据处理功能,满足不同行业的物联网应用需求。 最后,开发基于STM32和ESP8266 WiFi技术的物联网项目,需要编写上传代码程序,主要包括以下功能: 1. 通过WiFi连接至互联网; 2. 采集传感器数据并进行处理; 3. 将处理后的数据上传至阿里云物联网平台; 4. 实现数据的存储和管理; 5. 远程控制和监测设备状态。 总之,物联网项目实战开发需要结合硬件和云平台,利用编程技术实现数据上传和处理等功能。本文主要介绍基于STM32和ESP8266 WiFi技术的物联网项目实践,并提供了上传阿里云物联网平台代码程序的制作思路。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值