之前玩过ardunio,但发现很多元程序自己都无法修改,也不知道怎么去该,还是c语言自己写的比较容易看懂,了解清楚。今天向大家介绍三个物联网平台:yeelink,乐为联网,传感云,当然还有什么机智云,氦氪云什么的,iotgo,太多了。当然我也发现论坛里有人发些qq物联的资料,但发现也没有人去做,看他的api文档,我也是云里雾里,级别不够就玩不起了。我就简单介绍下下面三个国内的小公司平台。
yeelink,以前的网站做着还可以,现在自从被小米收购了,感觉还是之前的老样子,额米有什么改观,只是用用而已,测试下就不错了。
这是我写的程序,有些乱,也没有注释,只是做为参考来用。
WiFi模块调试.zip
(845.84 KB, 下载次数: 9)
部分源码预览:
- extern uchar UART1_sendchar(unsigned char c);
- extern void UART1_sendstr(unsigned char *dat);
- #define USERKEY "e84c3784af864fb0bb70fd33cb434a45"
- uint t2;//每秒执行一条指令时间
- uint t3;//发送一条数据命令时间
- uchar wendu=20,shidu=30;
- uint zhiliang=10;
- char *flag1,flag2,flag3;
- void esp8266_printf(uchar *pch,uint len)
- {
- while((len!=0)&&(*pch!='\0'))
- {
- UART1_sendchar(*pch);
- pch++;
- len--;
- }
- UART1_sendstr("\r\n");
- }
- void esp8266_uint_to_string(uint number)
- {
- uint i;
- uint nTmp;
- //感觉这写法怪怪的吗?干嘛不for(i=1;i<5;i++) 因为这样不需要使用库函数pow()
- for(i=10000;i>=1;i=i/10)
- {
- nTmp = number/i;
- if(nTmp >=1 )
- UART1_sendchar(nTmp%10 + 0x30);
- }
- }
- //strstr算法
- char *strstr(uchar *s1,uchar *s2)
- {
- int n;
- if(*s2)
- {
- while(*s1)
- {
- for( n=0; *(s1+n) == *(s2+n); n++)
- {
- if( !*(s2 + n +1) )
- return (char *)s1;
- }
- s1++;
- }
- return 0;
- }
- else
- return (char *)s1;
- }
- //计算机算法
- char * strstr2 ( uchar * str1, uchar * str2)
- {
- char *cp = (char *) str1;
- char *s1, *s2;
- if ( !*str2 )
- return((char *)str1);
- while (*cp) //该算法以str2为基准在str1逐字节匹配
- {
- s1 = cp;
- s2 = (char *) str2;
- while ( *s1 && *s2 && !(*s1-*s2) )
- s1++, s2++;
- if (!*s2) //如果s2在和s1比较中提前结束,那么说明匹配成功
- return(cp);
- cp++;
- }
- return(0);
- }
- void esp8266_cissend(uchar wangguan,uchar len)
- {
- uchar i;
- UART1_sendstr("AT+CIPSEND=");
- i=wangguan+'0';
- UART1_sendchar(i);
- UART1_sendstr(",");
- esp8266_uint_to_string(len);
- UART1_sendstr("\r\n");
-
- }
- uchar getLength(int someValue) {
- // there's at least one byte:
- uchar digits = 1;
- // continually divide the value by ten,
- // adding one to the digit count for each
- // time you divide, until you're at 0:
- int dividend = someValue /10;
- while (dividend > 0) {
- dividend = dividend /10;
- digits++;
- }
- // return the number of digits:
- return digits;
- }
- void esp8266_send_string(uchar wangguan,uchar len,uchar *pch) //局域网络内传输信息
- {
-
- if(t2>30) //30秒后进入数据发送阶段
- {
- switch(t3)
- {
- case 0:UART1_sendstr("AT+CIPSTART=0,\"TCP\",\"192.168.0.100\",8080\r\n");t3=0;break;
- case 1:esp8266_cissend(wangguan,len);
- t3=1;
- break;
- case 2:esp8266_printf(pch,len);t3=2;break;
-
- default:break;
- }
- }
- }
- void esp8266_post_internet() //网络服务器传输信息 30秒更新一次数据
- {
- if(t2>250)
- {
- uchar i;
- switch(t3)
- {
- case 0:UART1_sendstr("AT+CIPSTART=1,\"TCP\",\"tcp.lewei50.com\",9960\r\n");break;
- case 40:esp8266_cissend(1,87);break; //固定数值不变
- // case 87:Multiple_read_HMC5883();break;
- case 88:dh11_read(0);break;
- case 89:dh11_read(1);break;
- case 90:
- UART1_sendstr("{\"method\": \"update\",\"gatewayNo\": \"01\",\"userkey\": \"e84c3784af864fb0bb70fd33cb434a45\"}&^!");
- zhiliang=adc_scan()+1;
- break;
- case 160:
- i=getLength(wendu)+getLength(shidu)+getLength(zhiliang);
- esp8266_cissend(1,119+i);break;
- case 200:UART1_sendstr("{\"method\": \"upload\",\"data\":[{\"Name\":\"shidu\",\"Value\":\"");
- esp8266_uint_to_string(shidu);
- UART1_sendstr("\"},{\"Name\":\"wendu\",\"Value\":\"");
- esp8266_uint_to_string(wendu);
- UART1_sendstr("\"},{\"Name\":\"zhiliang\",\"Value\":\"");
- esp8266_uint_to_string(zhiliang);
- UART1_sendstr("\"}]}&^!");
- break;
- case 270:UART1_sendstr("AT+CIPSTART=0,\"TCP\",\"tcp.lewei50.com\",9960\r\n");break;
- default:break;
- }
- if(++t3>=300)
- t3=0;
- }
- }
- void esp8266_init(void)
- {
- switch(t2)//十五秒内启动入网程序
- {
- case 2:PC_DDR|=0x04;PC_CR1|=0x04;PC_CR2|=0x04;PC_ODR|=0X04;break;
- case 3:PC_ODR&=~0x04;break;
- case 4:PC_ODR|=0X04;break;
- case 20:UART1_sendstr("AT+RST\r\n");break; //重启
- case 70:UART1_sendstr("AT+CWMODE=3\r\n");break; //发送工作模式
- case 100:UART1_sendstr("AT+CWJAP=\"dadangjia\",\"39203806\"\r\n");break; //发送连接密码
- case 130:UART1_sendstr("AT+CIPMUX=1\r\n");break; //开启多连接状态
- case 160:UART1_sendstr("AT+CIPSERVER=1,8080\r\n");break; //开启服务器模式
- case 190:UART1_sendstr("AT+CIPSTART=0,\"TCP\",\"192.168.0.100\",8080\r\n");break; //本地路由网络链接
- // case 260:UART1_sendstr("AT+CIPSTART=1,\"TCP\",\"42.121.128.216\",9960\r\n");break;
- default:break;
- }
- }
复制代码
|