顺庆区城乡规划建设局门户网站,免费查企业联系方式,h5创建网站,Wordpress上传万网空间机智云,全球领先的智能硬件软件自助开发及物联网(iot)云服务平台。机智云平台为开发者提供了自助式智能硬件开发工具与开放的云端服务。通过傻瓜化的自助工具、完善的SDK与API服务能力最大限度降低了物联网硬件开发的技术门槛#xff0c;降低开发者的研发成本#xff0c;提升… 机智云,全球领先的智能硬件软件自助开发及物联网(iot)云服务平台。机智云平台为开发者提供了自助式智能硬件开发工具与开放的云端服务。通过傻瓜化的自助工具、完善的SDK与API服务能力最大限度降低了物联网硬件开发的技术门槛降低开发者的研发成本提升开发者的产品投产速度帮助开发者进行硬件智能化升级更好的连接、服务最终消费者。使用机智云作为云平台可以轻松实现物联网功能。首先我们需要注册并进入机智云官网。 一、进入开发者中心 如图这是我的机智云。 创建一个自定义产品如下 添加好数据节点如下这是一个开关一个led灯 复制密码以备用 二、生成代码
1、选择MCU开发其他平台输入密钥生成代码包。 2、生成成功下载到本地 3、移植代码 将 Gizwits 和 Utils 一直到我们的工程中如下图 将它们添加进工程 修改 gizwits_product.c ,如下
/**
************************************************************
* file gizwits_product.c
* brief Gizwits control protocol processing, and platform-related hardware initialization
* author Gizwits
* date 2017-07-19
* version V03030000
* copyright Gizwits
*
* note Gizwits is only for smart hardware
* Gizwits Smart Cloud for Smart Products
* Links | Value Added | Open | Neutral | Safety | Own | Free | Ecology
* www.gizwits.com
*
***********************************************************/
#include stdio.h
#include string.h
#include stm32f10x.h // Device header
#include gizwits_product.h
#include Serial3.h
#include LED.hstatic uint32_t timerMsCount;/** Current datapoint */
dataPoint_t currentDataPoint;/**} */
/**name Gizwits User Interface
* {
*//**
* brief Event handling interface* Description:* 1. Users can customize the changes in WiFi module status* 2. Users can add data points in the function of event processing logic, such as calling the relevant hardware peripherals operating interface* param [in] info: event queue
* param [in] data: protocol data
* param [in] len: protocol data length
* return NULL
* ref gizwits_protocol.h
*/
int8_t gizwitsEventProcess(eventInfo_t *info, uint8_t *gizdata, uint32_t len)
{uint8_t i 0;dataPoint_t *dataPointPtr (dataPoint_t *)gizdata;moduleStatusInfo_t *wifiData (moduleStatusInfo_t *)gizdata;protocolTime_t *ptime (protocolTime_t *)gizdata;#if MODULE_TYPEgprsInfo_t *gprsInfoData (gprsInfo_t *)gizdata;
#elsemoduleInfo_t *ptModuleInfo (moduleInfo_t *)gizdata;
#endifif((NULL info) || (NULL gizdata)){return -1;}for(i0; iinfo-num; i){switch(info-event[i]){case EVENT_btn:currentDataPoint.valuebtn dataPointPtr-valuebtn;GIZWITS_LOG(Evt: EVENT_btn %d \n, currentDataPoint.valuebtn);if(0x01 currentDataPoint.valuebtn){//user handleLED1_ON();}else{//user handle LED1_OFF(); }break;case WIFI_SOFTAP:break;case WIFI_AIRLINK:break;case WIFI_STATION:break;case WIFI_CON_ROUTER:break;case WIFI_DISCON_ROUTER:break;case WIFI_CON_M2M:break;case WIFI_DISCON_M2M:break;case WIFI_RSSI:GIZWITS_LOG(RSSI %d\n, wifiData-rssi);break;case TRANSPARENT_DATA:GIZWITS_LOG(TRANSPARENT_DATA \n);//user handle , Fetch data from [data] , size is [len]break;case WIFI_NTP:GIZWITS_LOG(WIFI_NTP : [%d-%d-%d %02d:%02d:%02d][%d] \n,ptime-year,ptime-month,ptime-day,ptime-hour,ptime-minute,ptime-second,ptime-ntp);break;case MODULE_INFO:GIZWITS_LOG(MODULE INFO ...\n);
#if MODULE_TYPEGIZWITS_LOG(GPRS MODULE ...\n);//Format By gprsInfo_tGIZWITS_LOG(moduleType : [%d] \n,gprsInfoData-Type);
#elseGIZWITS_LOG(WIF MODULE ...\n);//Format By moduleInfo_tGIZWITS_LOG(moduleType : [%d] \n,ptModuleInfo-moduleType);
#endifbreak;default:break;}}return 0;
}/**
* Data point initialization function* In the function to complete the initial user-related data
* param none
* return none
* note The developer can add a data point state initialization value within this function
*/
void userInit(void)
{memset((uint8_t*)currentDataPoint, 0, sizeof(dataPoint_t)); currentDataPoint.valuebtn 0;currentDataPoint.valuenum 0;
}/**
* brief gizTimerMs* millisecond timer maintenance function ,Millisecond increment , Overflow to zero* param none
* return none
*/
void gizTimerMs(void)
{timerMsCount;
}/**
* brief gizGetTimerCount* Read system time, millisecond timer* param none
* return System time millisecond
*/
uint32_t gizGetTimerCount(void)
{return timerMsCount;
}/**
* brief mcuRestart* MCU Reset function* param none
* return none
*/
void mcuRestart(void)
{__set_FAULTMASK(1);NVIC_SystemReset();//修改
}/**
* brief uartWrite* Serial write operation, send data to the WiFi module* param buf : Data address
* param len : Data length
*
* return : Not 0,Serial send success;
* -1Input Param Illegal
*/int32_t uartWrite(uint8_t *buf, uint32_t len)
{uint32_t i 0;if(NULL buf){return -1;}#ifdef PROTOCOL_DEBUGGIZWITS_LOG(MCU2WiFi[%4d:%4d]: , gizGetTimerCount(), len);for(i0; ilen; i){GIZWITS_LOG(%02x , buf[i]);}GIZWITS_LOG(\n);#endiffor(i0; ilen; i){//USART_SendData(UART, buf[i]);//STM32 test demo//Serial port to achieve the function, the buf[i] sent to the moduleUSART_SendData(USART3, buf[i]);while (USART_GetFlagStatus(USART3, USART_FLAG_TXE) RESET);if(i 2 buf[i] 0xFF){//Serial port to achieve the function, the 0x55 sent to the module//USART_SendData(UART, 0x55);//STM32 test demoUSART_SendData(USART3, 0x55);while (USART_GetFlagStatus(USART3, USART_FLAG_TXE) RESET);}}return len;
} 准备一个定时器程序定时大约1ms在定时器中断中调用 gizTimerMs(); 为机智云提供时钟。
void TIM2_IRQHandler()
{if(TIM_GetITStatus(TIM2,TIM_IT_Update) SET){gizTimerMs(); //为机智云提供时钟TIM_ClearITPendingBit(TIM2,TIM_IT_Update);}
}准备一个UART连接ESP01并在改UART的中断函数中调用 gizPutData(value, 1); 函数用于接受ESP01串口中断发来的数据。
void USART3_IRQHandler(void)
{uint8_t value 0;if(USART_GetITStatus(Serial3_UARTx, USART_IT_RXNE) ! RESET){USART_ClearITPendingBit(Serial3_UARTx, USART_IT_RXNE); value USART_ReceiveData(USART3); //读取接收到的数据gizPutData(value, 1); }
}同时配置好按键在主函数中按键获取函数并通过按键值选择调用联网和重新配置如下图
#include stm32f10x.h // Device header
#include OLED.h
#include Timer.h
#include gizwits_product.h
#include Serial.h
#include Serial3.h
#include LED.h
#include Key.h
#include Delay.h extern dataPoint_t currentDataPoint;//协议初始化
void Gizwits_Init(void)
{Timer_Init();//1msSerial_Init();Serial3_Init();//gizPutData((uint8_t *)aRxBuffer,1);userInit();//用户信息初始化目前只是把结构体信息复位gizwitsInit();//机智云的初始化printf(gizwitsInit智能云初始化\r\n);
}//数据采集
void userHandle(void)
{currentDataPoint.valuenum 50;
}int main()
{uint8_t keyNum0;LED_Init();Key_Init();Gizwits_Init();while(1){keyNum Key_GetNum();if(keyNum1)//按键1按下{printf(WIFI进入AirLink连接模式\r\n);gizwitsSetMode(WIFI_AIRLINK_MODE);//Air-link模式接入} if(keyNum2)//按键2按下99{ printf(WIFI复位请重新配置连接\r\n);gizwitsSetMode(WIFI_RESET_MODE);//WIFI复位}userHandle();//数据上行gizwitsHandle((dataPoint_t *)currentDataPoint);}
} 至此STM32代码移植已经完毕
三、ESP01烧入机智云固件
1、进入机智云固件下载地址下载如下固件地址如下
Gizwits 2、本次使用STM32F103C8T6于是选择8M带combine的 3、打开 flash_download_tool进行固件下载如图 四、APP配置机智云
1、按下按键1进入配网模式注意网络wifi网关不能是5GHZ的频段建议2.4GHz如图 2、 点击机智云app左上角的加号选择Airlink输入我们的wifi名和密码点击下一步 选择乐鑫然后下一步。 最后等待连接成功即可 3、连接成功APP出现一个叫做测试的设备如下 五、测试功能
1、显示测试数50本次采用固定数字测试数字上传情况代码如下
//数据采集
void userHandle(void)
{currentDataPoint.valuenum 50;
}2、按键开关灯
按下开此时led会亮起如下 再次按下led会关闭如下