收藏官网首页
查看: 102035|回复: 37

【STM 32】之智能药盒

36

主题

308

帖子

70

积分

注册会员

Rank: 2

积分
70
跳转到指定楼层
楼主
发表于 2016-7-2 22:35:15 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
校园创客福利
本帖最后由 郭庆帅 于 2016-8-29 14:53 编辑
基于STM32+机智云平台的智能药盒



file:///C:\Users\GUOQIN~1.QIN\AppData\Local\Temp\ksohtml\wps28E1.tmp.png(宝盒镇楼o(∩_∩)o )
============================华丽的分割线=============================
创意来源:
“哎呀,忘了”!随着生活节奏的加快,年龄的增长,人们的总容易忘记一些事情,比如忘记吃药。尤其是家中的老人,由于身体问题,可能需要长期服药治疗,但年岁大了总容易忘这忘那的。但在科技快速发展的今天,这些都不是问题,我们设计并开发了一款名为“健康卫士”的智能药盒,可以联网监测用户的服药情况,提示用户服药,并且根据用户设定自动提取所需药物。
哎呀!!!!!!!忘记了我是来参赛的,说下这次大赛要求达成情况.
原创申明:转载请注明出处:http://club.gizwits.com/thread-2685-1-1.html
作者:来自山东的小伙子~~~~萌萌哒
【开源硬件】机智云智能硬件创新大赛  http://club.gizwits.com/thread-2646-1-1.html

比赛要求达成情况!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

各个分值项详解!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


一,需求提炼数据点以及产品定义


二  设别端实现配置入网
文字描述。。。。。。。。

三 实现demoapp和设备的控制其实我们自己开发了个app(后面介绍)
视频演示。。。。。。。。

四  实时时钟
因为这个功能我们用了pcf8563芯片 这样就实现了实时时钟(而且断网后不影响)

五  报警功能
手机远程提醒(后面介绍)   语音提醒(后面介绍)

六 可产品化程度
先说一下这次的成本,因为我们这次是做的模型 ,什么都在探索,步进电机就换了两次(每次都是力不够(力量和空间)),总体来说这次花费还是不很多500 元左右,如果投入市场成本也就是200元左右另外我们设计的非常人性化
一次设定,很长时间不用管(它是自动筛选药品哦),即使是掉电也不用怕哦,有记忆功能
断网更不要怕 自动重新连接   另外本地运行(语音还是照样提醒哦)

七硬件系统
硬件系统主要是pcb 走线布局  +stm32(C语言 功能实现)+wifi(esp8266)+机智云平台
在下先放个功能图给大家尝尝鲜!!!!!!!!!!!!!!!!

八、软件系统
软件部分主要是用机智云的sdk,集成了机智云的sdk,开发起来还是很好入门的,向我这种小白在学了两个星期后就基本入门了,加上自己的做做UI,就可以了。代码很简单 贴出来了在后面(开源了)(好戏在后面。。。。。。。。。。。。。。


九 发挥项
1 语音播
通过wt588d, 进行语音提醒 ,感情切(也可以自己录音哦
2 断电后数据不丢
通过数据保存(一次设定,全程无忧)。(再也不用担心重复设定了)
3 自动化分拣药品种类
每天还在想那个药品吃多少吗(你就out 啦 ,全新智能药盒, 再也不用烦恼了
4 断网后自动连接
断网后重新设置  不用  (网络连接失败后(有网络后)会重新连接的
==================================================================
                                我是分割线=============================================================================
---------------------------上面主要讲了写大赛要求相关的东西。。。说了这么多我们还没有知道过程呢。。。好吧 马上来--------------------------------------------------------------------
我们这个智能药盒是我们团队两个月多月的时间从无到有的一个搞机械 组装,一个搞app ,一个搞电路写程序,接下来就有我详细介绍我们的这个作品
总体结构:
电气部分:通过重新设计板子设计基于机智云平台的设备,设计集成了若干模块,主要包括eeprom时钟模块运动驱动模块语                    音提醒模块传感器模块(温湿度、霍尔、光耦)网络模块。
药盒模型重点解决自动提取药物部分的模型(转盘式双层筛板
         使用机智云平台,独立搭建数据点。
      APP机智云平台和MCU通讯,从而进行对智能药盒的管理控制远程        监控远程提醒远程温湿度查看

材料清单:
pcb板(定制)
步进电机;驱动
震动电机
Risym槽型光耦模块
温湿度模块
语音模块
汉高百得PL70
圆管
esp8266  模块
电池
轴承
亚克力(定制)
同步轮
同步带
pcf8563模块
下面我就以时间轴方式介绍一下电气部分7月一号:开贴报名
7月1-5号:寻找小伙伴
7月5-10号:  确定主题(开始建立数据点)7月11-20号:对机智云的协议分析(包括大段字节 ,数据的标志位的理解)
7月21-30号:对本地时钟和传输的数据进行写入
8月1-10号: 对机智云的硬件充分理解画出原理图和pcb板
8月11-17号:终于等到了pcb(对电路板的焊接 和调试 )
8月17-20号:对原理图和pcb 图进行修改 从而实现功能
注:(程序一直穿插其中)
下面以此介绍程序的实现,电路的实现,pcb注意的事再次之前先发下我的文件夹(每天都在记录 哦)


复制代码

复制代码
原理图:: pcb图  来个3d吧
大家会疑问,为什么要做成是这样的 答案是省钱,又做了个wifi 转接板   现实图这样的

裁剪之后是这样的(焊接的照片 传不上去  正在联系机智云。。。稍后奉上)

贴的字数限制了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
请查看3楼








G3机智云物联网云服务 287087942
有什么疑问,可以在论坛,qq群(优先在论坛哦,避免重复造轮子)
在论坛提问的回答率是100%!!!!!!!!
希望和大家一起交流学习.

36

主题

308

帖子

70

积分

注册会员

Rank: 2

积分
70
推荐
 楼主| 发表于 2016-8-31 21:46:43 | 只看该作者

评委资料大汇总

本帖最后由 郭庆帅 于 2016-9-8 19:01 编辑

视频:点这里单片机源程序:点这里
原理图和pcb图:点这里
app源文件和apk:点这里
(失效后联系我)

点评

你好能否把资料发一份,学习一下  详情 回复 发表于 2018-1-5 17:07
G3机智云物联网云服务 287087942
有什么疑问,可以在论坛,qq群(优先在论坛哦,避免重复造轮子)
在论坛提问的回答率是100%!!!!!!!!
希望和大家一起交流学习.

36

主题

308

帖子

70

积分

注册会员

Rank: 2

积分
70
推荐
 楼主| 发表于 2016-8-22 14:14:59 | 只看该作者

【STM 32】之智能药盒

本帖最后由 郭庆帅 于 2016-9-25 14:43 编辑

这是焊接后的照片  上面有步进电机驱动模块和语音模块、一键下载模块 、显示模块主控模块 、传感器模块、 电源模块
这是焊接的背面后面有我wifi模块和一些按键和时钟模块和保存数据模块

下面是全部焊好的正面图

这是后面的最终图 (调试好的)因为算错了电流 还有就是有散热 最终是这样的
到此电路部分完成。。。。。。。。。。。。。。。。。。。。。
下面开始 单片机程序!!!!!!!!!!!!!!
1.首先获取时间
  1. uint8_t getTime[9]={0xFF,0xFF,0x00,0x05,0x17,0x78,0x00,0x00,0x94};
复制代码

2 写入时间(给本地时钟写入时间
  1. PCF8563_set(0x10,0x07,XIEDate,XIEHour,XIEMin,XIEsecond,0x05);//
  2.                                 PCF8563_read(time);
复制代码


3存储药品个数和吃药时间
  1. Tmp[1]= CENCHU_A;Tmp[2]=CENCHU_B;Tmp[3]=CENCHU_C;Tmp[4]=CENCHU_D;
  2.                             Tmp[5]= ZAOSHI;Tmp[6]=ZAOFEN;Tmp[7]=ZHONGSHI;Tmp[8]=ZHONGFEN;
  3.                              Tmp[9]= WANSHI;Tmp[10]=WANFEN;Tmp[11]=CENCHU_C;Tmp[12]=CENCHU_D;
  4.                                IIC_WriteBuf(0,Tmp,16);
  5.                                 IIC_ReadBuf(0,Tmp,16);
复制代码

4 温湿度传感器
  1. /**
  2. ******
  3. *
  4. * @file      Hal_temp_hum.c
  5. * @author    Gizwtis
  6. * @version   V2.3
  7. * @date      2015-07-06
  8. *
  9. * @brief     »úÖÇÔÆ Ö»ÎªÖÇÄÜÓ²¼þ¶øÉú
  10. *            Gizwits Smart Cloud  for Smart Products
  11. *            Á´½Ó|ÔöÖµ|¿ª·Å|ÖÐÁ¢|°²È«|×ÔÓÐ|×ÔÓÉ|Éú̬
  12. *            www.gizwits.com
  13. *
  14. ******/
  15. #include "Hal_temp_hum/Hal_temp_hum.h"

  16. //Reset DHT11
  17. void DHT11_Rst(void)
  18. {
  19.     DHT11_IO_OUT();                                                                                         //SET OUTPUT
  20.     DHT11_DQ_OUT=0;                                                                                         //GPIOA.0=0
  21.     Delay_ms(20);                                                                                            //Pull down Least 18ms
  22.     DHT11_DQ_OUT=1;                                                                                         //GPIOA.0=1
  23.     Delay_us(30);                                                                                     //Pull up 20~40us
  24. }

  25. u8 DHT11_Check(void)
  26. {
  27.     u8 retry=0;
  28.     DHT11_IO_IN();                                                                                                //SET INPUT
  29.     while (DHT11_DQ_IN&&retry<100)                                //DHT11 Pull down 40~80us
  30.     {
  31.         retry++;
  32.         Delay_us(1);
  33.     }

  34.     if(retry>=100)
  35.         return 1;
  36.     else
  37.         retry=0;

  38.     while (!DHT11_DQ_IN&&retry<100)                                //DHT11 Pull up 40~80us
  39.     {
  40.         retry++;
  41.         Delay_us(1);
  42.     }

  43.     if(retry>=100)
  44.         return 1;                                                                                                                //chack error

  45.     return 0;
  46. }

  47. u8 DHT11_Read_Bit(void)
  48. {
  49.     u8 retry=0;
  50.     while(DHT11_DQ_IN&&retry<100)                                        //wait become Low level
  51.     {
  52.         retry++;
  53.         Delay_us(1);
  54.     }

  55.     retry=0;
  56.     while(!DHT11_DQ_IN&&retry<100)                                //wait become High level
  57.     {
  58.         retry++;
  59.         Delay_us(1);
  60.     }

  61.     Delay_us(40);//wait 40us

  62.     if(DHT11_DQ_IN)
  63.         return 1;
  64.     else
  65.         return 0;
  66. }

  67. u8 DHT11_Read_Byte(void)
  68. {
  69.     u8 i,dat;
  70.     dat=0;
  71.     for (i=0; i<8; i++)
  72.     {
  73.         dat<<=1;
  74.         dat|=DHT11_Read_Bit();
  75.     }

  76.     return dat;
  77. }

  78. u8 DHT11_Read_Data(u8 *temperature,u8 *humidity)
  79. {
  80.     u8 buf[5];
  81.     u8 i;
  82.     DHT11_Rst();
  83.     if(DHT11_Check()==0)
  84.     {
  85.         for(i=0; i<5; i++)
  86.         {
  87.             buf[i]=DHT11_Read_Byte();
  88.         }
  89.         if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
  90.         {
  91.             *humidity=buf[0];
  92.             *temperature=buf[2];
  93.         }
  94.     }
  95.     else
  96.         return 1;

  97.     return 0;
  98. }

  99. u8 DHT11_Init(void)
  100. {
  101.     GPIO_InitTypeDef  GPIO_InitStructure;

  102.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  103.     GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);

  104.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  105.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  106.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  107.     GPIO_Init(GPIOB, &GPIO_InitStructure);
  108.     GPIO_SetBits(GPIOB,GPIO_Pin_3);

  109.     DHT11_Rst();
  110.     return DHT11_Check();
  111. }
复制代码
5语音程序
  1.     if(wtadd==0)
  2.                 {
  3.          if((GPIO_ReadInputDataBit(GPIO_WT588BY_PORT,GPIO_Pin_1)))
  4.        {
  5.         Send_oneline( 0 );
  6.                                  ++wtadd;
  7.           }
  8.            }        
复制代码
6 光耦传感器(这个地方用的中断)
  1. #include "Hal_GUANGOU.h"

  2. #include "Hal_Step_otor.h"
  3. #include "stdio.h"
  4. #include "delay.h"
  5. extern  int a ;

  6. void Delay1(__IO u32 nCount)         //¼òµ¥µÄÑÓʱº¯Êý
  7. {
  8.         while(--nCount);
  9. }

  10. void STEP_GPIO_GInit(void)//¹âñî
  11.         {
  12.       GPIO_InitTypeDef GPIO_InitStructure;
  13.             RCC_APB2PeriphClockCmd( GPIO_G1_CLK | GPIO_G2_CLK, ENABLE);//??LED
  14.    
  15.       GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPU;//IPU                                        //???????????
  16.       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                                        //?????
  17.         
  18.       GPIO_InitStructure.GPIO_Pin = GPIO_G1_PIN;        //¹âñî                                                //??LED1
  19.       GPIO_Init(GPIO_G1_PORT, &GPIO_InitStructure);                                                //???LED1

  20.       GPIO_InitStructure.GPIO_Pin = GPIO_G2_PIN;        //¹âñî                                                //??LED2
  21.       GPIO_Init(GPIO_G2_PORT, &GPIO_InitStructure);        
  22.                
  23.                     
  24.                   
  25.                
  26. }
  27. void STEP_GPIO_HUOER(void)//»ô¶û
  28.         {
  29.       GPIO_InitTypeDef GPIO_InitStructure;
  30.             RCC_APB2PeriphClockCmd( GPIO_Y1_CLK | GPIO_Y2_CLK, ENABLE);//??LED
  31.    
  32.       GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPD;//IPU                                        //???????????
  33.       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                                        //?????
  34.         
  35.             GPIO_InitStructure.GPIO_Pin = GPIO_Y1_PIN;        //»ô¶û                                                //??LED1
  36.       GPIO_Init(GPIO_Y1_PORT, &GPIO_InitStructure);                                                //???LED1

  37.       GPIO_InitStructure.GPIO_Pin = GPIO_Y2_PIN;                //»ô¶û                                        //??LED2
  38.       GPIO_Init(GPIO_Y2_PORT, &GPIO_InitStructure);
  39.         
  40.                   GPIO_InitStructure.GPIO_Pin = GPIO_BEIYONG3_PIN;        //±¸ÓÃÊäÈë
  41.       GPIO_Init(GPIO_BEIYONG3_PORT, &GPIO_InitStructure);                                                //???LED1

  42.       GPIO_InitStructure.GPIO_Pin = GPIO_BEIYONG4_PIN;                //±¸ÓÃÊäÈë
  43.       GPIO_Init(GPIO_BEIYONG4_PORT, &GPIO_InitStructure);
  44. }
  45. void EXTIX_Init(void)
  46. {

  47.            EXTI_InitTypeDef EXTI_InitStructure;
  48.            NVIC_InitTypeDef NVIC_InitStructure;
  49.           void STEP_GPIO_GInit();//¹âñî

  50.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);        //ʹÄܸ´Óù¦ÄÜʱÖÓ
  51.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);        //ÉèÖÃNVICÖжϷÖ×é2:2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶
  52.    
  53. //    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource1);
  54. //        
  55. //    EXTI_InitStructure.EXTI_Line=EXTI_Line1;
  56. //          EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //ÖжÏģʽ
  57. //          EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//ϽµÑØ
  58. //          EXTI_InitStructure.EXTI_LineCmd=ENABLE;
  59. //          EXTI_Init(&EXTI_InitStructure);                //¸ù¾ÝEXTI_InitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯ÍâÉèEXTI¼Ä´æÆ÷
  60. //        
  61. //   
  62. //        
  63. //          NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;                        //ʹÄÜ°´¼ü ËùÔÚµÄÍⲿÖжÏͨµÀ
  64. //          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;        //ÇÀÕ¼ÓÅÏȼ¶2£¬
  65. //          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;                                        //×ÓÓÅÏȼ¶0×î¸ß¼¶
  66. //          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                                                //ʹÄÜÍⲿÖжÏͨµÀ
  67. //          NVIC_Init(&NVIC_InitStructure);

  68.         
  69.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);        //ʹÄܸ´Óù¦ÄÜʱÖÓ
  70.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);        //ÉèÖÃNVICÖжϷÖ×é2:2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶
  71.     //GPIOA.0          ÖжÏÏßÒÔ¼°Öжϳõʼ»¯ÅäÖà ÉÏÉýÑØ´¥·¢ PA0  WK_UP
  72.     GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);
  73.     EXTI_InitStructure.EXTI_Line=EXTI_Line0;
  74.           EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //ÖжÏģʽ EXTI_Trigger_Rising  ÉÏÉý
  75.           EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//ÉÏÉýÑØ
  76.           EXTI_InitStructure.EXTI_LineCmd=ENABLE;
  77.           EXTI_Init(&EXTI_InitStructure);                //¸ù¾ÝEXTI_InitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯ÍâÉèEXTI¼Ä´æÆ÷

  78.           NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;                        //ʹÄÜ°´¼ü ËùÔÚµÄÍⲿÖжÏͨµÀ
  79.           NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;        //ÇÀÕ¼ÓÅÏȼ¶2£¬
  80.           NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;                                        //×ÓÓÅÏȼ¶0×î¸ß¼¶
  81.           NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                                                //ʹÄÜÍⲿÖжÏͨµÀ
  82.           NVIC_Init(&NVIC_InitStructure);         
  83.         
  84.         
  85. }
  86. void EXTI0_IRQHandler(void)  //0,1,2,3,4,9_5,15_10
  87. {
  88.               printf("½øÈëÖжÏ");
  89.                      a=a+1;
  90.         printf(" %d",a);
  91.               Delay1(300000);
  92.                
  93.         EXTI_ClearITPendingBit(EXTI_Line0); //Çå³ýLINE4ÉϵÄÖжϱê־λ  
  94. }
复制代码

7 霍尔传感器(和语音提醒)
  1. bool IR_Handle(void)
  2. {
  3.         printf("½øÈë»ô¶û¼ì²â");
  4.     if(GPIO_ReadInputDataBit(Infrared_GPIO_PORT, Infrared_GPIO_PIN))
  5.     {
  6.                         if(b%2==0)
  7.                                 {
  8.                                         if(q==1)
  9.                                         {               
  10.                                                 if((GPIO_ReadInputDataBit(GPIO_WT588BY_PORT,GPIO_Pin_1)))
  11.               {
  12.                                                                 printf("ÓïÒôÌáÐѹéλ");
  13.         Send_oneline(4);
  14.                                                                 q=0;
  15.                 }
  16.                                                         }
  17.                                                 
  18.                                         printf("Ò©ºÐÔÚԭλÖÃ");
  19.                            return 0;
  20.                                 }
  21.                         else
  22.                         {
  23.                                 
  24.     printf("Ö´ÐÐÖÐÒ©ºÐÒÔÄóö");                                
  25.                 if((GPIO_ReadInputDataBit(GPIO_WT588BY_PORT,GPIO_Pin_1)))
  26.        {
  27.         Send_oneline(2);
  28.        }
  29.                     return 1;
  30.                         }

  31.     }
  32.     else
  33.     {
  34.                         printf("yyyyyy%d",h);
  35.                         if(h ==1 )
  36.                         {
  37.                                 printf("hahahhahahhh");
  38.                         
  39.                                 if((GPIO_ReadInputDataBit(GPIO_WT588BY_PORT,GPIO_Pin_1)))
  40.        {
  41.         Send_oneline(3);
  42.                                  b=0;
  43.                                          h=0;
  44.                                  q=1;
  45.                          }
  46.                         
  47.                  }

  48.         return 0;
  49.                  }
  50.                         
  51.     }
复制代码

8 步进电机程序
  1. #define GPIO_A1_CLK    RCC_APB2Periph_GPIOA//B¸Ä³ÉA
  2. #define GPIO_A1_PORT   GPIOA
  3. #define GPIO_A1_PIN    GPIO_Pin_12

  4. #define GPIO_B1_CLK    RCC_APB2Periph_GPIOA
  5. #define GPIO_B1_PORT   GPIOA
  6. #define GPIO_B1_PIN    GPIO_Pin_11

  7. #define GPIO_C1_CLK    RCC_APB2Periph_GPIOB
  8. #define GPIO_C1_PORT   GPIOB
  9. #define GPIO_C1_PIN    GPIO_Pin_15

  10. #define GPIO_D1_CLK    RCC_APB2Periph_GPIOB
  11. #define GPIO_D1_PORT   GPIOB
  12. #define GPIO_D1_PIN    GPIO_Pin_14

  13. #define GPIO_A2_CLK    RCC_APB2Periph_GPIOB
  14. #define GPIO_A2_PORT   GPIOB
  15. #define GPIO_A2_PIN    GPIO_Pin_10

  16. #define GPIO_B2_CLK    RCC_APB2Periph_GPIOB
  17. #define GPIO_B2_PORT   GPIOB
  18. #define GPIO_B2_PIN    GPIO_Pin_11

  19. #define GPIO_C2_CLK    RCC_APB2Periph_GPIOB
  20. #define GPIO_C2_PORT   GPIOB
  21. #define GPIO_C2_PIN    GPIO_Pin_12

  22. #define GPIO_D2_CLK    RCC_APB2Periph_GPIOB
  23. #define GPIO_D2_PORT   GPIOB
  24. #define GPIO_D2_PIN    GPIO_Pin_13
复制代码
步进电机原理程序
  1. #define Coil_A1 {GPIO_SetBits(GPIO_A1_PORT,GPIO_A1_PIN);\
  2.                                                                 GPIO_ResetBits(GPIO_B1_PORT,GPIO_B1_PIN);\
  3.                                                                 GPIO_ResetBits(GPIO_C1_PORT,GPIO_C1_PIN);\
  4.                                                                 GPIO_ResetBits(GPIO_D1_PORT,GPIO_D1_PIN);\
  5.                                                         }//AÏàͨµç£¬ÆäËûÏà¶Ïµç
  6. #define Coil_B1 {GPIO_ResetBits(GPIO_A1_PORT,GPIO_A1_PIN);\
  7.                                                                 GPIO_SetBits(GPIO_B1_PORT,GPIO_B1_PIN);\
  8.                                                                 GPIO_ResetBits(GPIO_C1_PORT,GPIO_C1_PIN);\
  9.                                                                 GPIO_ResetBits(GPIO_D1_PORT,GPIO_D1_PIN);\
  10.                                                                 }//BÏàͨµç£¬ÆäËûÏà¶Ïµç
  11. #define Coil_C1 {GPIO_ResetBits(GPIO_A1_PORT,GPIO_A1_PIN);\
  12.                                                                 GPIO_ResetBits(GPIO_B1_PORT,GPIO_B1_PIN);\
  13.                                                                 GPIO_SetBits(GPIO_C1_PORT,GPIO_C1_PIN);\
  14.                                                                 GPIO_ResetBits(GPIO_D1_PORT,GPIO_D1_PIN);\
  15.                                                                 }//CÏàͨµç£¬ÆäËûÏà¶Ïµç
  16. #define Coil_D1 {GPIO_ResetBits(GPIO_A1_PORT,GPIO_A1_PIN);\
  17.                                                                 GPIO_ResetBits(GPIO_B1_PORT,GPIO_B1_PIN);\
  18.                                                                 GPIO_ResetBits(GPIO_C1_PORT,GPIO_C1_PIN);\
  19.                                                                 GPIO_SetBits(GPIO_D1_PORT,GPIO_D1_PIN);\
  20.                                                                 }//DÏàͨµç£¬ÆäËûÏà¶Ïµç
  21. #define Coil_AB1 {GPIO_SetBits(GPIO_A1_PORT,GPIO_A1_PIN);\
  22.                                                                 GPIO_SetBits(GPIO_B1_PORT,GPIO_B1_PIN);\
  23.                                                                 GPIO_ResetBits(GPIO_C1_PORT,GPIO_C1_PIN);\
  24.                                                                 GPIO_ResetBits(GPIO_D1_PORT,GPIO_D1_PIN);\
  25.                                                                 }//ABÏàͨµç£¬ÆäËûÏà¶Ïµç
  26. #define Coil_BC1 {GPIO_ResetBits(GPIO_A1_PORT,GPIO_A1_PIN);\
  27.                                                                 GPIO_SetBits(GPIO_B1_PORT,GPIO_B1_PIN);\
  28.                                                                 GPIO_SetBits(GPIO_C1_PORT,GPIO_C1_PIN);\
  29.                                                                 GPIO_ResetBits(GPIO_D1_PORT,GPIO_D1_PIN);\
  30.                                                                 }//BCÏàͨµç£¬ÆäËûÏà¶Ïµç
  31.                                                         
  32. #define Coil_CD1 {GPIO_ResetBits(GPIO_A1_PORT,GPIO_A1_PIN);\
  33.                                                                 GPIO_ResetBits(GPIO_B1_PORT,GPIO_B1_PIN);\
  34.                                                                 GPIO_SetBits(GPIO_C1_PORT,GPIO_C1_PIN);\
  35.                                                                 GPIO_SetBits(GPIO_D1_PORT,GPIO_D1_PIN);\
  36.                                                                 }//CDÏàͨµç£¬ÆäËûÏà¶Ïµç
  37. #define Coil_DA1 {GPIO_SetBits(GPIO_A1_PORT,GPIO_A1_PIN);\
  38.                       GPIO_ResetBits(GPIO_B1_PORT,GPIO_B1_PIN);\
  39.                                                                 GPIO_ResetBits(GPIO_C1_PORT,GPIO_C1_PIN);\
  40.                                                                 GPIO_SetBits(GPIO_D1_PORT,GPIO_D1_PIN);\
  41. }
  42.                                                                 //DÏàͨµç£¬ÆäËûÏà¶Ïµç
  43. #define Coil_OFF {GPIO_ResetBits(GPIO_A1_PORT,GPIO_A1_PIN);\
  44.                                                                         GPIO_ResetBits(GPIO_B1_PORT,GPIO_B1_PIN);\
  45.                                                                         GPIO_ResetBits(GPIO_C1_PORT,GPIO_C1_PIN);\
  46.                                                                          GPIO_ResetBits(GPIO_D1_PORT,GPIO_D1_PIN);\
  47.                                                                         }//È«²¿¶Ïµç

  48. #define Coil_A2 {GPIO_SetBits(GPIO_A2_PORT,GPIO_A2_PIN);\
  49.                                                                 GPIO_ResetBits(GPIO_B2_PORT,GPIO_B2_PIN);\
  50.                                                                 GPIO_ResetBits(GPIO_C2_PORT,GPIO_C2_PIN);\
  51.                                                                 GPIO_ResetBits(GPIO_D2_PORT,GPIO_D2_PIN);\
  52.                                                         }//AÏàͨµç£¬ÆäËûÏà¶Ïµç
  53. #define Coil_B2 {GPIO_ResetBits(GPIO_A2_PORT,GPIO_A2_PIN);\
  54.                                                                 GPIO_SetBits(GPIO_B2_PORT,GPIO_B2_PIN);\
  55.                                                                 GPIO_ResetBits(GPIO_C2_PORT,GPIO_C2_PIN);\
  56.                                                                 GPIO_ResetBits(GPIO_D2_PORT,GPIO_D2_PIN);\
  57.                                                                 }//BÏàͨµç£¬ÆäËûÏà¶Ïµç
  58. #define Coil_C2 {GPIO_ResetBits(GPIO_A2_PORT,GPIO_A2_PIN);\
  59.                                                                 GPIO_ResetBits(GPIO_B2_PORT,GPIO_B2_PIN);\
  60.                                                                 GPIO_SetBits(GPIO_C2_PORT,GPIO_C2_PIN);\
  61.                                                                 GPIO_ResetBits(GPIO_D2_PORT,GPIO_D2_PIN);\
  62.                                                                 }//CÏàͨµç£¬ÆäËûÏà¶Ïµç
  63. #define Coil_D2 {GPIO_ResetBits(GPIO_A2_PORT,GPIO_A2_PIN);\
  64.                                                                 GPIO_ResetBits(GPIO_B2_PORT,GPIO_B2_PIN);\
  65.                                                                 GPIO_ResetBits(GPIO_C2_PORT,GPIO_C2_PIN);\
  66.                                                                 GPIO_SetBits(GPIO_D2_PORT,GPIO_D2_PIN);\
  67.                                                                 }//DÏàͨµç£¬ÆäËûÏà¶Ïµç
  68. #define Coil_AB2 {GPIO_SetBits(GPIO_A2_PORT,GPIO_A2_PIN);\
  69.                                                                 GPIO_SetBits(GPIO_B2_PORT,GPIO_B2_PIN);\
  70.                                                                 GPIO_ResetBits(GPIO_C2_PORT,GPIO_C2_PIN);\
  71.                                                                 GPIO_ResetBits(GPIO_D2_PORT,GPIO_D2_PIN);\
  72.                                                                 }//ABÏàͨµç£¬ÆäËûÏà¶Ïµç
  73. #define Coil_BC2 {GPIO_ResetBits(GPIO_A2_PORT,GPIO_A2_PIN);\
  74.                                                                 GPIO_SetBits(GPIO_B2_PORT,GPIO_B2_PIN);\
  75.                                                                 GPIO_SetBits(GPIO_C2_PORT,GPIO_C2_PIN);\
  76.                                                                 GPIO_ResetBits(GPIO_D2_PORT,GPIO_D2_PIN);\
  77.                                                                 }//BCÏàͨµç£¬ÆäËûÏà¶Ïµç
  78.                                                         
  79. #define Coil_CD2 {GPIO_ResetBits(GPIO_A2_PORT,GPIO_A2_PIN);\
  80.                                                                 GPIO_ResetBits(GPIO_B2_PORT,GPIO_B2_PIN);\
  81.                                                                 GPIO_SetBits(GPIO_C2_PORT,GPIO_C2_PIN);\
  82.                                                                 GPIO_SetBits(GPIO_D2_PORT,GPIO_D2_PIN);\
  83.                                                                 }//CDÏàͨµç£¬ÆäËûÏà¶Ïµç
  84. #define Coil_DA2 {GPIO_SetBits(GPIO_A2_PORT,GPIO_A2_PIN);\
  85.                       GPIO_ResetBits(GPIO_B2_PORT,GPIO_B2_PIN);\
  86.                                                                 GPIO_ResetBits(GPIO_C2_PORT,GPIO_C2_PIN);\
  87.                                                                 GPIO_SetBits(GPIO_D2_PORT,GPIO_D2_PIN);\
  88. }
  89.                                                                 //DÏàͨµç£¬ÆäËûÏà¶Ïµç
  90. #define Coil_OFF2 {GPIO_ResetBits(GPIO_A2_PORT,GPIO_A2_PIN);\
  91.                                                                         GPIO_ResetBits(GPIO_B2_PORT,GPIO_B2_PIN);\
  92.                                                                         GPIO_ResetBits(GPIO_C2_PORT,GPIO_C2_PIN);\
  93.                                                                          GPIO_ResetBits(GPIO_D2_PORT,GPIO_D2_PIN);\
  94.                                                                         }//È«²¿¶Ïµç
复制代码
到此stm32程序完毕 (代码比较多 ,仔细看哦)


下面是机械部分这是智能药盒侧视图(整体图 震贴)

下面零到一组装


下面的可是上了铣床铣出来的



把这两个组装起来


加上同步轮

下面是电机部分

下面是电机组装

图2

整体框架

外观美化

最终完成


             健康卫士APP一、控制页面
  1. <font size="1">//控制页面
  2. protected void onCreate(Bundle savedInstanceState) {
  3.                 super.onCreate(savedInstanceState);
  4.                 setContentView(R.layout.gokit_control);
  5.                 tabHost = (TabHost) findViewById(android.R.id.tabhost);
  6.                 tabHost.setup();
  7.                 tabHost.addTab(tabHost.newTabSpec("one_drug").setIndicator("第一种药").setContent(R.id.one_drug));
  8.                 tabHost.addTab(tabHost.newTabSpec("two_drug").setIndicator("第二种药").setContent(R.id.two_drug));
  9.                 tabHost.addTab(tabHost.newTabSpec("three_drug").setIndicator("第三种药").setContent(R.id.three_drug));
  10.                 tabHost.addTab(tabHost.newTabSpec("four_drug").setIndicator("第四种药").setContent(R.id.four_drug));
  11.                
  12.                 initViews();   //初始化控件
  13.                 initEvents();  //初始化**
  14.                
  15.                 deviceStatu = new HashMap<String, Object>();
  16.                 controlDevice = (ControlDevice) getIntent().getSerializableExtra("device");
  17.                 WApplication.mControlDevice=controlDevice;
  18.                 xpgWifiDevice = BaseActivity.findDeviceByMac(controlDevice.getMac(), controlDevice.getDid());
  19.                 if (xpgWifiDevice != null) {
  20.                         xpgWifiDevice.setListener(deviceListener);
  21.                 }
  22.                 actionBar.setTitle(controlDevice.getName());
  23.         }

  24.         final protected static char[] hexArray = "0123456789ABCDEF".toCharArray();

  25.         public static String bytesToHex(byte[] bytes) {
  26.                 char[] hexChars = new char[bytes.length * 3];
  27.                 for (int j = 0; j < bytes.length; j++) {
  28.                         int v = bytes[j] & 0xFF;
  29.                         hexChars[j * 3] = hexArray[v >>> 4];
  30.                         hexChars[j * 3 + 1] = hexArray[v & 0x0F];
  31.                         hexChars[j * 3 + 2] = ' ';
  32.                 }
  33.                 return new String(hexChars);
  34.         }



  35.         /**
  36.          * 初始化控件.
  37.          */
  38.         private void initViews() {
  39.                 mybutton = (Button) findViewById(R.id.mybutton);
  40.                
  41.                 editTextA = (EditText) findViewById(R.id.editTextA);
  42.                 editTextB = (EditText) findViewById(R.id.editTextB);
  43.                 editTextC = (EditText) findViewById(R.id.editTextC);
  44.                 editTextD = (EditText) findViewById(R.id.editTextD);
  45.                 editTextE = (EditText) findViewById(R.id.editTextE);
  46.                 editTextF = (EditText) findViewById(R.id.editTextF);
  47.                 editTextG = (EditText) findViewById(R.id.editTextG);
  48.                 editTextH = (EditText) findViewById(R.id.editTextH);
  49.                
  50.                 vibrator = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
  51.                 swInfrared = (Switch) findViewById(R.id.sw_infrared1);
  52.         
  53.                
  54.                 Map<String, String> map = FileActivity.ShowData3();
  55.                 if(map != null)
  56.                 {
  57.                         editTextA.setText(map.get("Aname"));
  58.                         editTextB.setText(map.get("Age"));
  59.                         editTextC.setText(map.get("Bname"));
  60.                         editTextD.setText(map.get("Bge"));
  61.                         editTextE.setText(map.get("Cname"));
  62.                         editTextF.setText(map.get("Cge"));
  63.                         editTextG.setText(map.get("Dname"));
  64.                         editTextH.setText(map.get("Dge"));
  65.                 }

  66.         }

  67.         /**
  68.          * 初始化**.
  69.          */
  70.         private void initEvents() {
  71.                 /**打开预约时间页面*/
  72.                 mybutton.setOnClickListener(new OnClickListener() {
  73.                         @Override
  74.                         public void onClick(View v) {
  75.                                 // TODO Auto-generated method stub
  76.                                 String unt1 = editTextB.getText().toString().trim();
  77.                                 String unt2 = editTextD.getText().toString().trim();
  78.                                 String unt3 = editTextF.getText().toString().trim();
  79.                                 String unt4 = editTextH.getText().toString().trim();
  80.                                 Intent intent = new Intent();
  81.                                 
  82.                                 //储存药品名字合个数
  83.                                 if(TextUtils.isEmpty(editTextC.getText().toString()) && TextUtils.isEmpty(editTextE.getText().toString()) && TextUtils.isEmpty(editTextG.getText().toString()))
  84.                                 {
  85.                                         FileActivity.DataLog3(editTextA.getText().toString(),Integer.parseInt(editTextB.getText().toString()), "", 0, "",0,"",0);
  86.                                 }
  87.                                 else if(editTextE.getText().toString() == null && editTextG.getText().toString() == null)
  88.                                 {
  89.                                         FileActivity.DataLog3(editTextA.getText().toString(),Integer.parseInt(editTextB.getText().toString()),editTextC.getText().toString(),Integer.parseInt(editTextD.getText().toString()) , "",0,"",0);
  90.                                 }
  91.                                 else if(editTextG.getText().toString() == null)
  92.                                 {
  93.                                         FileActivity.DataLog3(editTextA.getText().toString(),Integer.parseInt(editTextB.getText().toString()),editTextC.getText().toString(),Integer.parseInt(editTextD.getText().toString()) , editTextE.getText().toString(),Integer.parseInt(editTextF.getText().toString()),"",0);
  94.                                 }
  95.                                 else
  96.                                 {
  97.                                         FileActivity.DataLog3(editTextA.getText().toString(),Integer.parseInt(editTextB.getText().toString()), editTextC.getText().toString(),Integer.parseInt(editTextD.getText().toString()), editTextE.getText().toString(),Integer.parseInt(editTextF.getText().toString()), editTextG.getText().toString(),Integer.parseInt(editTextH.getText().toString()));
  98.                                 }
  99.                                 
  100.                                 if(TextUtils.isEmpty(unt1))
  101.                                 {
  102.                                         intent.putExtra("one1","0");
  103.                                 }
  104.                                 else
  105.                                 {
  106.                                         intent.putExtra("one1",unt1);
  107.                                 }
  108.                                 if(TextUtils.isEmpty(unt2))
  109.                                 {
  110.                                         intent.putExtra("one2","0");
  111.                                 }
  112.                                 else
  113.                                 {
  114.                                         intent.putExtra("one2",unt2);
  115.                                 }
  116.                                 if(TextUtils.isEmpty(unt3))
  117.                                 {
  118.                                         intent.putExtra("one3","0");
  119.                                 }
  120.                                 else
  121.                                 {
  122.                                         intent.putExtra("one3",unt3);
  123.                                 }
  124.                                 if(TextUtils.isEmpty(unt4))
  125.                                 {
  126.                                         intent.putExtra("one4","0");
  127.                                 }
  128.                                 else
  129.                                 {
  130.                                         intent.putExtra("one4",unt4);
  131.                                 }
  132.                                 intent.setClass(GokitControlActivity1.this, Time_Activity.class);
  133.                                 startActivity(intent);
  134.                         }
  135.                 });
  136.                 swInfrared.setOnCheckedChangeListener(new OnCheckedChangeListener() {

  137.                         @Override
  138.                         public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
  139.                                 try {
  140.                                         if(isChecked == true)
  141.                                         {
  142.                                                 vibrator.vibrate(new long[]{1000,3000,1000,3000},0);  //手机震动提示
  143.                                                 
  144.                                                 new AlertDialog.Builder(GokitControlActivity1.this).setTitle("警告")//设置对话框标题  
  145.                                              .setMessage("为了您的健康!\n请按时吃药!")//设置显示的内容
  146.                                             .setNegativeButton("确定",new DialogInterface.OnClickListener() {//添加返回按钮  
  147.                                                    
  148.                                                  @Override  
  149.                                                  public void onClick(DialogInterface dialog, int which) {//响应事件  
  150.                                           
  151.                                                      // TODO Auto-generated method stub  
  152.                                                         SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd HH:mm");
  153.                                         Date curDate = new Date(System.currentTimeMillis());//获取当前时间
  154.                                         String str = formatter.format(curDate);
  155.                                         if(editTextA.getText().toString() != null)
  156.                                         {
  157.                                                                  FileActivity.DataLog2(editTextA.getText().toString(),Integer.parseInt(editTextB.getText().toString()),str);

  158.                                         }
  159.                                         if(editTextC.getText().toString() != null)
  160.                                         {
  161.                                                 FileActivity.DataLog2(editTextC.getText().toString(),Integer.parseInt(editTextD.getText().toString()),str);
  162.                                         }
  163.                                         if(editTextE.getText().toString() != null)
  164.                                         {
  165.                                                 FileActivity.DataLog2(editTextE.getText().toString(),Integer.parseInt(editTextF.getText().toString()),str);
  166.                                         }
  167.                                         if(editTextG.getText().toString() != null)
  168.                                         {
  169.                                                 FileActivity.DataLog2(editTextG.getText().toString(),Integer.parseInt(editTextH.getText().toString()),str);
  170.                                         }
  171.                                                          vibrator.cancel();
  172.                                                      Log.i("123"," 请保存数据!");
  173.                                           
  174.                                                  }  
  175.                                           
  176.                                              }).show();//在按键响应事件中显示此对话框
  177.                                         }
  178.                                         else
  179.                                         {
  180.                                                  vibrator.cancel();
  181.                                         }
  182.                                         Log.v("123", ""+isChecked);
  183.                                        
  184.                                         sendJson(KEY_INFRARED, isChecked);
  185.                                 } catch (JSONException e) {
  186.                                         e.printStackTrace();
  187.                                 }
  188.                         }
  189.                 });
  190.         }
复制代码


二、预约时间
  1. <blockquote>class Button12 implements OnClickListener
复制代码






三、温湿度查看
  1. /**
  2. *温湿度查看
  3. */
  4. case R.id.action_device_status:
  5.                         new Ale.Builder(GokitControlActivity1.this).setTitle("温湿度查看")//设置对话框标题  
  6.                           
  7.                      .setMessage("环境湿度   "+ s +"\n" + "环境温度  " + w)//设置显示的内容
  8.                     .setNegativeButton("确定",new DialogInterface.OnClickListener() {//添加返回按钮  
  9.                          @Override  
  10.                   
  11.                          public void onClick(DialogInterface dialog, int which) {//响应事件  
  12.                   
  13.                              // TODO Auto-generated method stub  
  14.                   
  15.                              Log.i("alertdialog"," 请保存数据!");
  16.                   
  17.                          }  
  18.                   
  19.                      }).show();//在按键响应事件中显示此对话框                          
  20.                         break;
复制代码
                                             


四、储存数据与读取数据

  1. /**
复制代码

五、服药日志记录

  1. /*<span style="font-size: 14px; line-height: 1.5;">*服药日志</span>
复制代码






资料视频9楼!!!!!!!!!!!如果你觉的好可以打赏,我们还会出更好的作品!!!!!!!!




G3机智云物联网云服务 287087942
有什么疑问,可以在论坛,qq群(优先在论坛哦,避免重复造轮子)
在论坛提问的回答率是100%!!!!!!!!
希望和大家一起交流学习.

36

主题

308

帖子

70

积分

注册会员

Rank: 2

积分
70
推荐
 楼主| 发表于 2016-8-31 21:17:07 | 只看该作者

资料和视频 大汇总!!!!!!!!!!!!!!!!!

本帖最后由 郭庆帅 于 2016-8-31 22:04 编辑

下面是视频:游客点这里单片机 源码链接:游客点这里
app 源码链接:游客点这里
电路图链接游客点这里(失效后联系我i)

------------------------------------------------------------------------
评委看这里!!!!!
请移步10楼!!



G3机智云物联网云服务 287087942
有什么疑问,可以在论坛,qq群(优先在论坛哦,避免重复造轮子)
在论坛提问的回答率是100%!!!!!!!!
希望和大家一起交流学习.

0

主题

1

帖子

261

积分

中级会员

Rank: 3Rank: 3

积分
261
6#
发表于 2016-8-22 15:49:24 来自手机 | 只看该作者
看着挺好的,机械设计用软件也很专业的,功能也不错。 感谢机智云提供的平台!

3

主题

10

帖子

126

积分

注册会员

Rank: 2

积分
126
7#
发表于 2016-8-23 08:53:13 | 只看该作者
您好 该设备是如何通过转盘筛选药品种类以及计算药片数量的?

36

主题

308

帖子

70

积分

注册会员

Rank: 2

积分
70
8#
 楼主| 发表于 2016-8-23 20:27:20 | 只看该作者
JerryLiu 发表于 2016-8-23 08:53
您好 该设备是如何通过转盘筛选药品种类以及计算药片数量的?

你好   请继续关注,稍后奉上
G3机智云物联网云服务 287087942
有什么疑问,可以在论坛,qq群(优先在论坛哦,避免重复造轮子)
在论坛提问的回答率是100%!!!!!!!!
希望和大家一起交流学习.

1

主题

25

帖子

263

积分

中级会员

Rank: 3Rank: 3

积分
263
9#
发表于 2016-8-28 01:10:34 | 只看该作者
不错,很好啊

0

主题

1

帖子

12

积分

新手上路

Rank: 1

积分
12
10#
发表于 2016-8-29 17:08:10 | 只看该作者
汉枫LPB120模块
感谢机智云平台和版主大大的无私奉献,关爱人类健康,从智能吃药开始

5

主题

17

帖子

108

积分

注册会员

Rank: 2

积分
108
12#
发表于 2016-9-1 22:09:33 | 只看该作者
“大家会疑问,为什么要做成是这样的 答案是省钱,又做了个wifi 转接板   现实图这样的”

琢磨了下才明白,假装是同一块板哈哈哈

36

主题

308

帖子

70

积分

注册会员

Rank: 2

积分
70
13#
 楼主| 发表于 2016-9-2 13:50:47 | 只看该作者
twowinter 发表于 2016-9-1 22:09
“大家会疑问,为什么要做成是这样的 答案是省钱,又做了个wifi 转接板   现实图这样的”

琢磨了下才明白 ...

对,因为10x10 一一下的都是一样的钱,而且 你要是拼版的话 还有拼版费
G3机智云物联网云服务 287087942
有什么疑问,可以在论坛,qq群(优先在论坛哦,避免重复造轮子)
在论坛提问的回答率是100%!!!!!!!!
希望和大家一起交流学习.

0

主题

14

帖子

1243

积分

金牌会员

Rank: 6Rank: 6

积分
1243
14#
发表于 2016-9-2 16:51:12 | 只看该作者
设计真的很不错。转载了

31

主题

121

帖子

1426

积分

金牌会员

Rank: 6Rank: 6

积分
1426
15#
发表于 2016-9-8 18:30:01 | 只看该作者
教您5分钟接入机智云,实现傻瓜式开发
郭庆帅 发表于 2016-9-2 13:50
对,因为10x10 一一下的都是一样的钱,而且 你要是拼版的话 还有拼版费

在哪里做的啊?让你拼板?嘉立创好像不允许这么搞啊

36

主题

308

帖子

70

积分

注册会员

Rank: 2

积分
70
16#
 楼主| 发表于 2016-9-8 19:04:39 | 只看该作者
李~ 发表于 2016-9-8 18:30
在哪里做的啊?让你拼板?嘉立创好像不允许这么搞啊

淘宝
G3机智云物联网云服务 287087942
有什么疑问,可以在论坛,qq群(优先在论坛哦,避免重复造轮子)
在论坛提问的回答率是100%!!!!!!!!
希望和大家一起交流学习.

0

主题

1

帖子

2

积分

新手上路

Rank: 1

积分
2
17#
发表于 2016-9-8 19:12:25 | 只看该作者
学习一下 。很棒的设计。初学stm32到一个阶段 前来看看

0

主题

10

帖子

1212

积分

金牌会员

Rank: 6Rank: 6

积分
1212
18#
发表于 2016-9-10 20:18:05 | 只看该作者
看着挺不错的

0

主题

29

帖子

246

积分

中级会员

Rank: 3Rank: 3

积分
246
19#
发表于 2016-10-1 19:05:01 | 只看该作者
郭庆帅 发表于 2016-8-22 14:14
这是焊接后的照片  上面有步进电机驱动模块和语音模块、一键下载模块 、显示模块主控模块 、传感器模块、  ...

佩服 工艺品
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

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