找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3489|回复: 0
打印 上一主题 下一主题
收起左侧

stm8裸奔物联网

[复制链接]
跳转到指定楼层
楼主
ID:110653 发表于 2016-3-30 18:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    之前玩过ardunio,但发现很多元程序自己都无法修改,也不知道怎么去该,还是c语言自己写的比较容易看懂,了解清楚。今天向大家介绍三个物联网平台:yeelink,乐为联网,传感云,当然还有什么机智云,氦氪云什么的,iotgo,太多了。当然我也发现论坛里有人发些qq物联的资料,但发现也没有人去做,看他的api文档,我也是云里雾里,级别不够就玩不起了。我就简单介绍下下面三个国内的小公司平台。


         yeelink,以前的网站做着还可以,现在自从被小米收购了,感觉还是之前的老样子,额米有什么改观,只是用用而已,测试下就不错了。


这是我写的程序,有些乱,也没有注释,只是做为参考来用。
WiFi模块调试.zip (845.84 KB, 下载次数: 9)



部分源码预览:
  1. extern uchar UART1_sendchar(unsigned char c);
  2. extern void UART1_sendstr(unsigned char *dat);

  3. #define USERKEY "e84c3784af864fb0bb70fd33cb434a45"
  4. uint t2;//每秒执行一条指令时间
  5. uint t3;//发送一条数据命令时间
  6. uchar wendu=20,shidu=30;
  7. uint zhiliang=10;
  8. char *flag1,flag2,flag3;
  9. void esp8266_printf(uchar *pch,uint len)
  10. {
  11.   while((len!=0)&&(*pch!='\0'))
  12.   {
  13.     UART1_sendchar(*pch);
  14.     pch++;
  15.     len--;
  16.   }
  17. UART1_sendstr("\r\n");
  18. }

  19. void esp8266_uint_to_string(uint number)
  20. {
  21. uint i;
  22. uint nTmp;
  23. //感觉这写法怪怪的吗?干嘛不for(i=1;i<5;i++) 因为这样不需要使用库函数pow()
  24. for(i=10000;i>=1;i=i/10)
  25.   {
  26.      nTmp = number/i;
  27.      if(nTmp >=1 )
  28.       UART1_sendchar(nTmp%10 + 0x30);
  29.   }
  30. }

  31. //strstr算法
  32. char *strstr(uchar *s1,uchar *s2)
  33. {
  34. int n;
  35. if(*s2)
  36. {
  37. while(*s1)
  38. {
  39. for( n=0; *(s1+n) == *(s2+n); n++)
  40. {
  41. if( !*(s2 + n +1) )
  42. return (char *)s1;
  43. }
  44. s1++;
  45. }
  46. return 0;
  47. }
  48. else
  49. return (char *)s1;
  50. }
  51. //计算机算法
  52. char * strstr2 ( uchar * str1, uchar * str2)

  53. {

  54. char *cp = (char *) str1;

  55. char *s1, *s2;

  56. if ( !*str2 )

  57. return((char *)str1);

  58. while (*cp) //该算法以str2为基准在str1逐字节匹配

  59. {

  60. s1 = cp;

  61. s2 = (char *) str2;

  62. while ( *s1 && *s2 && !(*s1-*s2) )

  63. s1++, s2++;

  64. if (!*s2) //如果s2在和s1比较中提前结束,那么说明匹配成功

  65. return(cp);

  66. cp++;

  67. }

  68. return(0);

  69. }


  70. void esp8266_cissend(uchar wangguan,uchar len)
  71. {
  72.   uchar i;
  73.   UART1_sendstr("AT+CIPSEND=");
  74.   i=wangguan+'0';
  75.   UART1_sendchar(i);
  76.   UART1_sendstr(",");
  77.   esp8266_uint_to_string(len);  
  78.   UART1_sendstr("\r\n");
  79.   
  80. }

  81. uchar getLength(int someValue) {  
  82.    // there's at least one byte:  
  83.    uchar digits = 1;  
  84.    // continually divide the value by ten,   
  85.    // adding one to the digit count for each  
  86.    // time you divide, until you're at 0:  
  87.    int dividend = someValue /10;  
  88.    while (dividend > 0) {  
  89.      dividend = dividend /10;  
  90.      digits++;  
  91.    }  
  92.    // return the number of digits:  
  93.    return digits;  
  94. }

  95. void esp8266_send_string(uchar wangguan,uchar len,uchar *pch) //局域网络内传输信息
  96. {
  97.   
  98.   if(t2>30) //30秒后进入数据发送阶段
  99.   {
  100.   switch(t3)
  101.   {
  102.   case 0:UART1_sendstr("AT+CIPSTART=0,\"TCP\",\"192.168.0.100\",8080\r\n");t3=0;break;
  103.   case 1:esp8266_cissend(wangguan,len);
  104.          t3=1;
  105.          break;
  106.   case 2:esp8266_printf(pch,len);t3=2;break;

  107.   default:break;
  108.   }
  109.   }
  110. }

  111. void esp8266_post_internet()  //网络服务器传输信息  30秒更新一次数据
  112. {
  113.   if(t2>250)
  114.   {
  115.     uchar i;
  116.     switch(t3)
  117.     {
  118.     case 0:UART1_sendstr("AT+CIPSTART=1,\"TCP\",\"tcp.lewei50.com\",9960\r\n");break;
  119.     case 40:esp8266_cissend(1,87);break; //固定数值不变
  120. //    case 87:Multiple_read_HMC5883();break;
  121.     case 88:dh11_read(0);break;
  122.     case 89:dh11_read(1);break;
  123.     case 90:
  124.             UART1_sendstr("{\"method\": \"update\",\"gatewayNo\": \"01\",\"userkey\": \"e84c3784af864fb0bb70fd33cb434a45\"}&^!");
  125.             zhiliang=adc_scan()+1;
  126.             break;
  127.     case 160:  
  128.             i=getLength(wendu)+getLength(shidu)+getLength(zhiliang);
  129.             esp8266_cissend(1,119+i);break;
  130.     case 200:UART1_sendstr("{\"method\": \"upload\",\"data\":[{\"Name\":\"shidu\",\"Value\":\"");
  131.             esp8266_uint_to_string(shidu);
  132.             UART1_sendstr("\"},{\"Name\":\"wendu\",\"Value\":\"");
  133.             esp8266_uint_to_string(wendu);
  134.             UART1_sendstr("\"},{\"Name\":\"zhiliang\",\"Value\":\"");
  135.             esp8266_uint_to_string(zhiliang);
  136.             UART1_sendstr("\"}]}&^!");
  137.             break;
  138.      case 270:UART1_sendstr("AT+CIPSTART=0,\"TCP\",\"tcp.lewei50.com\",9960\r\n");break;      
  139.     default:break;
  140.     }
  141.     if(++t3>=300)
  142.       t3=0;
  143.   }
  144. }

  145. void esp8266_init(void)
  146. {
  147.   switch(t2)//十五秒内启动入网程序
  148.   {
  149.   case 2:PC_DDR|=0x04;PC_CR1|=0x04;PC_CR2|=0x04;PC_ODR|=0X04;break;
  150.   case 3:PC_ODR&=~0x04;break;
  151.   case 4:PC_ODR|=0X04;break;
  152.   case 20:UART1_sendstr("AT+RST\r\n");break;    //重启
  153.   case 70:UART1_sendstr("AT+CWMODE=3\r\n");break;  //发送工作模式
  154.   case 100:UART1_sendstr("AT+CWJAP=\"dadangjia\",\"39203806\"\r\n");break; //发送连接密码
  155.   case 130:UART1_sendstr("AT+CIPMUX=1\r\n");break;      //开启多连接状态
  156.   case 160:UART1_sendstr("AT+CIPSERVER=1,8080\r\n");break;  //开启服务器模式
  157.   case 190:UART1_sendstr("AT+CIPSTART=0,\"TCP\",\"192.168.0.100\",8080\r\n");break;  //本地路由网络链接
  158. //  case 260:UART1_sendstr("AT+CIPSTART=1,\"TCP\",\"42.121.128.216\",9960\r\n");break;
  159.   default:break;
  160.   }
  161. }

复制代码




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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