找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10087|回复: 15
收起左侧

基于STM32+ESP8266 wifi的智能鱼缸源码

  [复制链接]
ID:201598 发表于 2018-10-22 20:58 | 显示全部楼层 |阅读模式
    本设计主要是由STM32f103c8t6,wifi模块用的ESP8266,主要控制鱼缸的灯光,换水,换氧,过滤,水位的功能,通过机制云开发平台设置数据点如图,完成超声波控制液位,温度DS18B20检测水温,最初想法水温也可以控制,但是最后加热棒功率不够,无法加热水,放弃此功能,有兴趣得可以自己加,最后液晶显示页面主要是显示上次换水时间,换水次数,加氧时间,水温。
智能鱼缸数据点.jpg
单片机源程序如下:

  1. #include "main.h"
  2. #include "stm32f1xx_hal.h"

  3. /* USER CODE BEGIN Includes */
  4. #include "hal_key.h"
  5. #include "gizwits_product.h"
  6. #include "common.h"
  7. #include "UltrasonicWave.h"
  8. #include "ds18b20.h"
  9. #include "timer.h"
  10. #include "ctrl.h"
  11. #include "oled.h"
  12. #include "stm32_hal_legacy.h"

  13. /* USER CODE END Includes */

  14. /* Private variables ---------------------------------------------------------*/
  15. TIM_HandleTypeDef htim2;

  16. UART_HandleTypeDef huart1;
  17. UART_HandleTypeDef huart2;

  18. /* USER CODE BEGIN PV */
  19. /* Private variables ---------------------------------------------------------*/
  20. #define GPIO_KEY_NUM 2 ///< Defines the total number of key member        
  21. keyTypedef_t singleKey[GPIO_KEY_NUM]; ///< Defines a single key member array pointer
  22. keysTypedef_t keys;  
  23. /* USER CODE END PV */


  24. /* Private function prototypes -----------------------------------------------*/
  25. void SystemClock_Config(void);
  26. static void MX_GPIO_Init(void);
  27. static void MX_TIM2_Init(void);
  28. static void MX_USART1_UART_Init(void);
  29. static void MX_USART2_UART_Init(void);
  30. static void MX_NVIC_Init(void);


  31. /* USER CODE BEGIN PFP */
  32. /* Private function prototypes -----------------------------------------------*/

  33. /* USER CODE END PFP */

  34. /* USER CODE BEGIN 0 */
  35. /**
  36. * key1 short press handle
  37. * @param none
  38. * @return none
  39. */
  40. void key1ShortPress(void)
  41. {
  42.     GIZWITS_LOG("KEY1 PRESS ,Production Mode\n");
  43.     gizwitsSetMode(WIFI_PRODUCTION_TEST);
  44. }

  45. /**
  46. * key1 long press handle
  47. * @param none
  48. * @return none
  49. */
  50. void key1LongPress(void)
  51. {
  52.     GIZWITS_LOG("KEY1 PRESS LONG ,Wifi Reset\n");
  53.     gizwitsSetMode(WIFI_RESET_MODE);

  54. }

  55. /**
  56. * key2 short press handle
  57. * @param none
  58. * @return none
  59. */
  60. void key2ShortPress(void)
  61. {
  62.     GIZWITS_LOG("KEY2 PRESS ,Soft AP mode\n");
  63.     #if !MODULE_TYPE
  64.     gizwitsSetMode(WIFI_SOFTAP_MODE);
  65.     #endif
  66. }

  67. /**
  68. * key2 long press handle
  69. * @param none
  70. * @return none
  71. */
  72. void key2LongPress(void)
  73. {
  74.     //AirLink mode
  75.     GIZWITS_LOG("KEY2 PRESS LONG ,AirLink mode\n");
  76.     #if !MODULE_TYPE
  77.     gizwitsSetMode(WIFI_AIRLINK_MODE);
  78.     #endif
  79. }

  80. /**
  81. * Key init function
  82. * @param none
  83. * @return none
  84. */
  85. void keyInit(void)
  86. {
  87.     singleKey[0] = keyInitOne(NULL, KEY1_GPIO_Port, KEY1_Pin, key1ShortPress, key1LongPress);
  88.     singleKey[1] = keyInitOne(NULL, KEY2_GPIO_Port, KEY2_Pin, key2ShortPress, key2LongPress);
  89.     keys.singleKey = (keyTypedef_t *)&singleKey;
  90.     keyParaInit(&keys);
  91. }
  92. /* USER CODE END 0 */


  93. int main(void)
  94. {
  95.   /* USER CODE BEGIN 1 */

  96.   /* USER CODE END 1 */

  97.   /* MCU Configuration----------------------------------------------------------*/

  98.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  99.   HAL_Init();

  100.   /* USER CODE BEGIN Init */

  101.   /* USER CODE END Init */

  102.   /* Configure the system clock */
  103.   SystemClock_Config();

  104.   /* USER CODE BEGIN SysInit */

  105.   /* USER CODE END SysInit */

  106.   /* Initialize all configured peripherals */
  107.   MX_GPIO_Init();
  108.         Wave_Init();
  109.   DS18B20_Init();
  110.         MX_Relay_Init();
  111.   OLED_Init();
  112.         OLED_Clear();
  113.   MX_TIM2_Init();
  114.         MX_TIM3_Init();
  115.         MX_TIM4_Init();
  116. //        TIM3_PWM_Init(36000,0);
  117.   MX_USART1_UART_Init();
  118.   MX_USART2_UART_Init();

  119.   /* Initialize interrupts */
  120.   MX_NVIC_Init();

  121.   /* USER CODE BEGIN 2 */

  122.         uartInit();
  123.         userInit();
  124.         gizwitsInit();
  125.         keyInit();
  126.                 OLED_Clear();
  127.   /* USER CODE END 2 */
  128.   while (1)
  129.   {

  130.                 gizwitsGetNTP();
  131.                 Display_Oled();
  132.                 Wave_ctr();
  133. if(flag3==0)
  134. {
  135.                 Ctr_Level();
  136. }
  137.                 userHandle();

  138.                 gizwitsHandle((dataPoint_t *)¤tDataPoint);
  139.   }
  140.   /* USER CODE END 3 */

  141. }

  142. /** System Clock Configuration
  143. */
  144. void SystemClock_Config(void)
  145. {

  146.   RCC_OscInitTypeDef RCC_OscInitStruct;
  147.   RCC_ClkInitTypeDef RCC_ClkInitStruct;

  148.     /**Initializes the CPU, AHB and APB busses clocks
  149.     */
  150.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  151.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  152.   RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  153.   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  154.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  155.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  156.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
  157.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  158.   {
  159.     _Error_Handler(__FILE__, __LINE__);
  160.   }

  161.     /**Initializes the CPU, AHB and APB busses clocks
  162.     */
  163.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  164.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  165.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  166.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  167.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  168.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  169.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  170.   {
  171.     _Error_Handler(__FILE__, __LINE__);
  172.   }

  173.     /**Configure the Systick interrupt time
  174.     */
  175.   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

  176.     /**Configure the Systick
  177.     */
  178.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  179.   /* SysTick_IRQn interrupt configuration */
  180.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  181. }

  182. /** NVIC Configuration
  183. */
  184. static void MX_NVIC_Init(void)
  185. {
  186.   /* TIM2_IRQn interrupt configuration */
  187.   HAL_NVIC_SetPriority(TIM2_IRQn, 1, 0);
  188.   HAL_NVIC_EnableIRQ(TIM2_IRQn);
  189.   /* USART2_IRQn interrupt configuration */
  190.   HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
  191.   HAL_NVIC_EnableIRQ(USART2_IRQn);
  192. }

  193. /* TIM2 init function */
  194. static void MX_TIM2_Init(void)
  195. {

  196.   TIM_ClockConfigTypeDef sClockSourceConfig;
  197.   TIM_MasterConfigTypeDef sMasterConfig;

  198.   htim2.Instance = TIM2;
  199.   htim2.Init.Prescaler = 7200-1;
  200.   htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  201.   htim2.Init.Period = 10-1;
  202.   htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  203.   htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  204.   if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
  205.   {
  206.     _Error_Handler(__FILE__, __LINE__);
  207.   }

  208.   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  209.   if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
  210.   {
  211.     _Error_Handler(__FILE__, __LINE__);
  212.   }

  213.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  214.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  215.   if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  216.   {
  217.     _Error_Handler(__FILE__, __LINE__);
  218.   }

  219. }

  220. /* USART1 init function */
  221. static void MX_USART1_UART_Init(void)
  222. {

  223.   huart1.Instance = USART1;
  224.   huart1.Init.BaudRate = 115200;
  225.   huart1.Init.WordLength = UART_WORDLENGTH_8B;
  226.   huart1.Init.StopBits = UART_STOPBITS_1;
  227.   huart1.Init.Parity = UART_PARITY_NONE;
  228.   huart1.Init.Mode = UART_MODE_TX_RX;
  229.   huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  230.   huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  231.   if (HAL_UART_Init(&huart1) != HAL_OK)
  232.   {
  233.     _Error_Handler(__FILE__, __LINE__);
  234.   }

  235. }

  236. /* USART2 init function */
  237. static void MX_USART2_UART_Init(void)
  238. {

  239.   huart2.Instance = USART2;
  240.   huart2.Init.BaudRate = 9600;
  241.   huart2.Init.WordLength = UART_WORDLENGTH_8B;
  242.   huart2.Init.StopBits = UART_STOPBITS_1;
  243.   huart2.Init.Parity = UART_PARITY_NONE;
  244.   huart2.Init.Mode = UART_MODE_TX_RX;
  245.   huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  246.   huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  247.   if (HAL_UART_Init(&huart2) != HAL_OK)
  248.   {
  249.     _Error_Handler(__FILE__, __LINE__);
  250.   }

  251. }

  252. /** Configure pins as
  253.         * Analog
  254.         * Input
  255.         * Output
  256.         * EVENT_OUT
  257.         * EXTI
  258. */
  259. static void MX_GPIO_Init(void)
  260. {

  261.   GPIO_InitTypeDef GPIO_InitStruct;

  262.   /* GPIO Ports Clock Enable */
  263.   __HAL_RCC_GPIOD_CLK_ENABLE();
  264.   __HAL_RCC_GPIOA_CLK_ENABLE();
  265.   __HAL_RCC_GPIOB_CLK_ENABLE();

  266.   /*Configure GPIO pin : KEY1_Pin */
  267.   GPIO_InitStruct.Pin = KEY1_Pin;
  268.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  269.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  270.   HAL_GPIO_Init(KEY1_GPIO_Port, &GPIO_InitStruct);

  271.   /*Configure GPIO pin : KEY2_Pin */
  272.   GPIO_InitStruct.Pin = KEY2_Pin;
  273.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  274.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  275.   HAL_GPIO_Init(KEY2_GPIO_Port, &GPIO_InitStruct);

  276. }

  277. /* USER CODE BEGIN 4 */

  278. /* USER CODE END 4 */

  279. /**
  280.   * @brief  This function is executed in case of error occurrence.
  281.   * @param  None
  282.   * @retval None
  283.   */
  284. void _Error_Handler(char * file, int line)
  285. {
  286.   /* USER CODE BEGIN Error_Handler_Debug */
  287.   /* User can add his own implementation to report the HAL error return state */
  288.   while(1)
  289.   {
  290.   }
  291.   /* USER CODE END Error_Handler_Debug */
  292. }

  293. #ifdef USE_FULL_ASSERT

  294. /**
  295.    * @brief Reports the name of the source file and the source line number
  296.    * where the assert_param error has occurred.
  297.    * @param file: pointer to the source file name
  298.    * @param line: assert_param error line source number
  299.    * @retval None
  300.    */
  301. void assert_failed(uint8_t* file, uint32_t line)
  302. {
  303.   /* USER CODE BEGIN 6 */
  304.   /* User can add his own implementation to report the file name and line number,
  305.     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  306.   /* USER CODE END 6 */

  307. }

  308. #endif

  309. /**
  310.   * @}
  311.   */

  312. /**
  313.   * @}
  314. */

  315. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

复制代码

所有资料51hei提供下载:
智能鱼缸 2018.6.1.rar (3.7 MB, 下载次数: 433)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:435457 发表于 2018-11-29 10:48 | 显示全部楼层
很厉害,
回复

使用道具 举报

ID:451875 发表于 2018-12-25 08:11 | 显示全部楼层
谢谢
回复

使用道具 举报

ID:445069 发表于 2019-3-27 17:19 | 显示全部楼层
stm32 + esp8266,通过 wifi 远程控制设备。
这是物联网必需的解决方案。
回复

使用道具 举报

ID:147329 发表于 2019-3-28 22:55 | 显示全部楼层
楼主你好,这里面有没有app的源码?我考虑是否下载
回复

使用道具 举报

ID:597631 发表于 2019-8-10 16:16 | 显示全部楼层
楼主你好,单片机源程序在哪个位置
回复

使用道具 举报

ID:624935 发表于 2019-10-16 11:18 | 显示全部楼层
很好,很厉害,好
回复

使用道具 举报

ID:759613 发表于 2020-5-25 18:13 | 显示全部楼层
大佬你做的智能鱼缸有没有手机端APP,发我一个不胜感激
回复

使用道具 举报

ID:823492 发表于 2020-9-27 09:32 | 显示全部楼层
大神,这个怎么在keil5中打不开呢?求解,急急急!
回复

使用道具 举报

ID:685171 发表于 2020-11-21 18:10 | 显示全部楼层
请问这个有实物图和接线图吗?
回复

使用道具 举报

ID:861916 发表于 2020-12-17 09:33 | 显示全部楼层
请问有实物图和接线图吗
回复

使用道具 举报

ID:851229 发表于 2021-3-17 15:39 | 显示全部楼层
有原理图和APP吗,大佬?
回复

使用道具 举报

ID:162811 发表于 2021-3-24 12:29 | 显示全部楼层
养鱼的话,这个很实用。
回复

使用道具 举报

ID:17204 发表于 2021-3-24 14:17 | 显示全部楼层
好东西啊 感谢分享思路。。。
回复

使用道具 举报

ID:164062 发表于 2021-4-6 09:35 | 显示全部楼层
能增加个连动功能就好了,比如分别单独定时控制加氧、灯光及过滤,还有温度与加温功能连动
回复

使用道具 举报

ID:783253 发表于 2021-4-9 16:49 | 显示全部楼层
谢谢楼主提供的思路
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表