请选择 进入手机版 | 继续访问电脑版

STM32+ESP8266接入机智云控制led

[复制链接]
陈雪霜 发表于 2021-1-1 17:44:30 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
机灵云出来许多年了,而且是开放免费的云平台。在学校学习的时候,主要学习的是中移物联网的OneNET云平台,在使用OneNET云平台的时候发现有些时候,平台下发指令很慢,一部门的原因也有大概是因为自己代码在处理惩罚下令的时候的问题,但也有大概是平台下发下令的时候的问题,所以我又寻求了新的一个物联网平台,眼光向机灵云看齐。
这绝对不是给机灵云打广告,这仅仅是个人学习分享。
首先上云平台的网址:https://www.gizwits.com/

首先自己注册一个账号成为开辟者点击开辟者中心

进入开辟者中心我们点击创建新项目

生存点击 后进入添加据点

生存后点击应用数据点
点击MCU开辟
选择硬件平台这里我们选择的是STM32F103C8 最后数据产物Product Secret:生存
点击生成代码 下载代码
打开工程
修改设置信息 我使用的是STM32F103RC 其他的设置可以自行百度修改源工程只要i不报错就行
因为我们不想使用按键来切换连接模式 所以生成的源代码中的按键部门我们不需要直接在 GIZWITS_LOG(“MCU Init Success \n”);后调用这句话
gizwitsSetMode(WIFI_AIRLINK_MODE);
初始化led相关的硬件部门
代码如下
void GPIO_Init(void)
{
GPIO_CLK_ENABLE();//使能GPIOE时钟
GPIO_InitTypeDef GPIO_InitStruct;//界说结构函数
GPIO_InitStruct.Pin = GPIO_PIN_8;//LED引脚
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;//工作模式
GPIO_InitStruct.Pull = GPIO_PULLUP;//上拉
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;//翻转速度50MHZ
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); //初始化结构体
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_SET);//事先将LED置高
}
找到int8_t gizwitsEventProcess(eventInfo_t info, uint8_t gizdata, uint32_t len)
事件处理惩罚函数
在事件处理惩罚函数中
管理事件
case EVENT_LED_1:
currentDataPoint.valueLED_1 = dataPointPtr->valueLED_1;
GIZWITS_LOG(“Evt: EVENT_LED_1 %d \n”, currentDataPoint.valueLED_1);
if(0x01 == currentDataPoint.valueLED_1)
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_RESET);//事先将LED置高
//user handle
}
else
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_SET);//事先将LED置高
//user handle
}
主函数中要调用led初始化函数
最后的主函数如下
#include “main.h”
#include “stm32f1xx_hal.h”
/
USER CODE BEGIN Includes /
#include “hal_key.h”
#include “gizwits_product.h”
#include “common.h”
/
USER CODE END Includes /
/
Private variables ---------------------------------------------------------
/
TIM_HandleTypeDef htim2;
UART_HandleTypeDef huart1;
UART_HandleTypeDef huart2;
/* USER CODE BEGIN PV /
/
Private variables ---------------------------------------------------------/
#define GPIO_KEY_NUM 2 ///< Defines the total number of key member
keyTypedef_t singleKey[GPIO_KEY_NUM]; ///< Defines a single key member array pointer
keysTypedef_t keys;
/
USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_TIM2_Init(void);
static void MX_USART1_UART_Init(void);
static void MX_USART2_UART_Init(void);
static void MX_NVIC_Init(void);
/* USER CODE BEGIN PFP /
/
Private function prototypes -----------------------------------------------/
#define GPIO_CLK_ENABLE() __HAL_RCC_GPIOE_CLK_ENABLE()
void GPIO_Init(void)
{
GPIO_CLK_ENABLE();//使能GPIOE时钟
GPIO_InitTypeDef GPIO_InitStruct;//界说结构函数
GPIO_InitStruct.Pin = GPIO_PIN_8;//LED引脚
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;//工作模式
GPIO_InitStruct.Pull = GPIO_PULLUP;//上拉
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;//翻转速度50MHZ
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); //初始化结构体
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_SET);//事先将LED置高
}
int main(void)
{
/
Reset of all peripherals, Initializes the Flash interface and the Systick. /
HAL_Init();
/
Configure the system clock /
SystemClock_Config();
/
Initialize all configured peripherals /
MX_GPIO_Init();
MX_TIM2_Init();
MX_USART1_UART_Init();
MX_USART2_UART_Init();
/
Initialize interrupts /
MX_NVIC_Init();
/
USER CODE BEGIN 2 /
timerInit();
uartInit();
userInit();
gizwitsInit();
//keyInit();
GPIO_Init();
GIZWITS_LOG(“MCU Init Success \n”);
gizwitsSetMode(WIFI_AIRLINK_MODE); //设置模式
/
USER CODE END 2 /
/
Infinite loop /
/
USER CODE BEGIN WHILE /
while (1)
{
/
USER CODE END WHILE */
/* USER CODE BEGIN 3 */
userHandle();
gizwitsHandle((dataPoint_t )&currentDataPoint);
}
/
USER CODE END 3 */
}
/** System Clock Configuration
*/
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
  1. /**Initializes the CPU, AHB and APB busses clocks */
复制代码
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
_Error_Handler(FILE, LINE);
}
  1. /**Initializes the CPU, AHB and APB busses clocks */
复制代码
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
{
_Error_Handler(FILE, LINE);
}
  1. /**Configure the Systick interrupt time */
复制代码
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
  1. /**Configure the Systick */
复制代码
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
/* SysTick_IRQn interrupt configuration */
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}
/** NVIC Configuration
/
static void MX_NVIC_Init(void)
{
/
TIM2_IRQn interrupt configuration /
HAL_NVIC_SetPriority(TIM2_IRQn, 1, 0);
HAL_NVIC_EnableIRQ(TIM2_IRQn);
/
USART2_IRQn interrupt configuration */
HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(USART2_IRQn);
}
/* TIM2 init function */
static void MX_TIM2_Init(void)
{
TIM_ClockConfigTypeDef sClockSourceConfig;
TIM_MasterConfigTypeDef sMasterConfig;
htim2.Instance = TIM2;
htim2.Init.Prescaler = 7200-1;
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 10-1;
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
{
_Error_Handler(FILE, LINE);
}
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
{
_Error_Handler(FILE, LINE);
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
{
_Error_Handler(FILE, LINE);
}
}
/* USART1 init function */
static void MX_USART1_UART_Init(void)
{
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
_Error_Handler(FILE, LINE);
}
}
/* USART2 init function */
static void MX_USART2_UART_Init(void)
{
huart2.Instance = USART2;
huart2.Init.BaudRate = 9600;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE;
huart2.Init.Mode = UART_MODE_TX_RX;
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart2) != HAL_OK)
{
_Error_Handler(FILE, LINE);
}
}
/** Configure pins as
* Analog
* Input
* Output
* EVENT_OUT
* EXTI
*/
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/*Configure GPIO pin : KEY1_Pin */
GPIO_InitStruct.Pin = KEY1_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(KEY1_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pin : KEY2_Pin */
GPIO_InitStruct.Pin = KEY2_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(KEY2_GPIO_Port, &GPIO_InitStruct);
}
/* USER CODE BEGIN 4 */
/* USER CODE END 4 */
/**


  • @brief This function is executed in case of error occurrence.
  • @param None
  • @retval None
    /
    void _Error_Handler(char * file, int line)
    {
    /
    USER CODE BEGIN Error_Handler_Debug /
    /
    User can add his own implementation to report the HAL error return state /
    while(1)
    {
    }
    /
    USER CODE END Error_Handler_Debug */
    }
#ifdef USE_FULL_ASSERT
/**


  • @brief Reports the name of the source file and the source line number
  • where the assert_param error has occurred.
  • @param file: pointer to the source file name
  • @param line: assert_param error line source number
  • @retval None
    /
    void assert_failed(uint8_t
    file, uint32_t line)
    {
    /* USER CODE BEGIN 6 /
    /
    User can add his own implementation to report the file name and line number,
    ex: printf(“Wrong parameters value: file %s on line %d\r\n”, file, line) /
    /
    USER CODE END 6 */
    }
    #endif
    代码修改完了, 尚有很重要的一步给ESP8266刷固件 最好是买一个刷固件的硬件
    如图 这个比力方便、

    官方教程
    http://docs.gizwits.com/zh-cn/deviceDev/ESP8266%E4%B8%B2%E5%8F%A3%E7%83%A7%E5%86%99%E8%AF%B4%E6%98%8E.html
    固件刷完了就下载代码验证程序
    下载机灵云提供的手机APP调试
    手机APP在机灵云的官方支持群能够找到
    点击一键设置 选择WIFI 输入WIFI的暗码 直接点击冲破最后等候配网
    WIFI模块类型根据自己的硬件选择 我选择的乐鑫
    背面直接点击我已经完成上述操纵,因为我们没有使用按键去选择所以不消管

点击变黄的谁人设备进去

按照步调来应该就没问题
最后重要的事情说三遍
连接wifi的时候 wifi 不能选择5G 的频段 !!!!!!
连接wifi的时候 wifi 不能选择5G 的频段!!!!!!
连接wifi的时候 wifi 不能选择5G 的频段!!!!!!
我们选择的方案是 MCU=ESP8266 所以下载固件的时候选择已经打包好的固件下载
我们选择的方案是 MCU=ESP8266 所以下载固件的时候选择已经打包好的固件下载
我们选择的方案是 MCU=ESP8266 所以下载固件的时候选择已经打包好的固件下载

来源:https://blog.csdn.net/weixin_44807892/article/details/111993965
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )