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


一、Stm32用Esp01s连接至阿里云飞燕平台

飞燕平台是阿里云的物联网平台,至于为什么选择这个平台,是因为我的队友选择的。。。但是都一样,没什么区别。

二、使用步骤

1.接入阿里云

和我之前的文章stm32+ESP01s连接到腾讯云物联网开发平台IOT类似:

//ESP8266模块和PC进入透传模式
void esp8266\_start\_trans(void)
{
	//设置工作模式 1:station模式 2:AP模式 3:兼容 AP+station模式
	esp8266\_send\_cmd("AT+CWMODE=1","OK",50);
	
	//让Wifi模块重启的命令
	esp8266\_send\_cmd("AT+RST","ready",20);
	
	delay\_ms(1000);         //延时3S等待重启成功
	delay\_ms(1000);
	delay\_ms(1000);
	delay\_ms(1000);
	//AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com"
	esp8266\_send\_cmd("AT+CIPSNTPCFG=1,8,\"ntp1.aliyun.com\"","OK",200);
	//让模块连接上自己的路由
	while(esp8266\_send\_cmd("AT+CWJAP=\"123\",\"12345678\"","WIFI GOT IP",600));
	
	//=0:单路连接模式 =1:多路连接模式
	esp8266\_send\_cmd("AT+CIPMUX=0","OK",20);
	
	//建立TCP连接 这四项分别代表了 要连接的ID号0~4 连接类型 远程服务器IP地址 远程服务器端口号
// while(esp8266\_send\_cmd("AT+CIPSTART=\"TCP\",\"172.20.10.10\",8080","CONNECT",200));
    esp8266\_send\_cmd("AT+MQTTUSERCFG=0,1,\"NULL\",\"test&a1oirJ5GTNy\",\"CD5221CE7AF744BB0F6A2F83ABA7E6C8C9136909\",0,0,\"\"","OK",200);
	
	esp8266\_send\_cmd("AT+MQTTCLIENTID=0,\"NULL|securemode=3\\,signmethod=hmacsha1|\"","OK",200);
	
	while(esp8266\_send\_cmd("AT+MQTTCONN=0,\"a1oirJ5GTNy.iot-as-mqtt.cn-shanghai.aliyuncs.com\",1883,1","OK",200));
	
	esp8266\_send\_cmd("AT+MQTTSUB=0,\"/sys/a1oirJ5GTNy/test/thing/event/property/post\",1","OK",50);
	
	esp8266\_send\_cmd("AT+MQTTSUB=0,\"/sys/a1oirJ5GTNy/test/thing/service/property/set\",0","OK",50);
	
	//是否开启透传模式 0:表示关闭 1:表示开启透传
	esp8266\_send\_cmd("AT+CIPMODE=1","OK",200);
	
	//透传模式下 开始发送数据的指令 这个指令之后就可以直接发数据了
	esp8266\_send\_cmd("AT+CIPSEND","OK",50);
}

2.新加模块

ULN2003芯片驱动步进电机
 /\*ULN2003芯片驱动步进电机\*/
/\*motor.h\*/
typedef enum {
  STOPPED,
  FORWARD,
  BACKWARD
} MotorDirection;

typedef struct {
  MotorDirection direction;
  int step;
  int speed; // new field, speed in milliseconds per step
} 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;
## 最后

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

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

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

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

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

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

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

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

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

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

 

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

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

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


WbMe6H-1715608431920)]

 

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

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

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


  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值