查看: 823|回复: 16
打印 上一主题 下一主题

stm8裸奔物联网

[复制链接] qrcode

34

主题

38

帖子

115

积分

注册会员

Rank: 2

积分
115
楼主
跳转到指定楼层
发表于 2015-12-4 10:06 AM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

        之前玩过ardunio,但发现很多元程序自己都无法修改,也不知道怎么去该,还是c语言自己写的比较容易看懂,了解清楚。今天向大家介绍三个物联网平台:yeelink,乐为联网,传感云,当然还有什么机智云,氦氪云什么的,iotgo,太多了。当然我也发现论坛里有人发些qq物联的资料,但发现也没有人去做,看他的api文档,我也是云里雾里,级别不够就玩不起了。我就简单介绍下下面三个国内的小公司平台。


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

回复

使用道具 举报

368

主题

2017

帖子

4268

积分

论坛元老

Rank: 8Rank: 8

积分
4268
沙发
发表于 2015-12-4 10:07 AM | 只看该作者

这是我写的程序,有些乱,也没有注释,只是做为参考来用。

回复 支持 反对

使用道具 举报

0

主题

65

帖子

6

积分

新手上路

Rank: 1

积分
6
板凳
发表于 2015-12-4 10:09 AM | 只看该作者

能再完善点吗

有刷帖嫌疑


回复 支持 反对

使用道具 举报

0

主题

70

帖子

8

积分

新手上路

Rank: 1

积分
8
地板
发表于 2015-12-4 10:12 AM | 只看该作者

            yeelink实在太水了,经常登不上去,完全是个鸡肋,以前用ardunio的时候还是很好用的。其实核心代码并不多,就是几行而已,但我发现在其中运行的时候,每行数据必须间隔一定时间才可以,yeelink官网说是20ms,但我是用100ms延时发送,还是有些啃的呀。

//下面是我写的3个网站连续登录发数据的代码,比较简单。

void esp8266_station_lewei_cmd()
{
  UART1_sendstr("{"method": "update","gatewayNo": "01","userkey": "e84c3784af864fb0bb70fd33cb434a45"}&^!");
}

void esp8266_station_lewei_data()
{
  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(""}]}&^!");
}

void esp8266_station_chuanganyun_post(uchar id)
{
 UART1_sendstr("POST /data/v1/numerical/insert?ak=e7423287d47587b404e98bd5055ecae2&id=");
 switch(id)
 {
 case 1:UART1_sendstr("56545e3ce4b00415c4381dc4");break;
 case 2:UART1_sendstr("56545dafe4b00415c4381dc3");break;
 case 3:UART1_sendstr("56545d37e4b00415c4381dba");break;
 default:break;
 }
 UART1_sendstr("&value=");
 switch(id)
 {
 case 1:esp8266_uint_to_string(zhiliang);break;
 case 2:esp8266_uint_to_string(wendu);break;
 case 3:esp8266_uint_to_string(shidu);break;
 default:break;
 }
 UART1_sendstr(" HTTP/1.1rn");
}

void esp8266_station_chuanganyun_host()
{
  UART1_sendstr("Host: api.wsncloud.comrnrn");
}



void esp8266_init_station(void)
{
  switch(t2)//十五秒内启动入网程序
  {
  case 1C_DDR|=0x04C_CR1|=0x04C_CR2|=0x04C_ODR|=0X04;break;
  case 2C_ODR&=~0x04;break;
  case 3C_ODR|=0X04;break;
  case 50:UART1_sendstr("AT+CWMODE=1rn");break;  //发送工作模式
  case 80:UART1_sendstr("AT+CWJAP="dadangjia","39203806"rn");break; //发送连接密码
  case 120:UART1_sendstr("AT+CIPMODE=1rn");break;  //开启服务器模式
  default:break;
  }
}

void esp8266_station_post()
{
  if(t2>150)
  {
      switch(t3)
    {
    case 0:UART1_sendstr("AT+CIPSTART="TCP","tcp.lewei50.com",9960rn");break;
    case 30:UART1_sendstr("AT+CIPSENDrn");break;
    case 48:dh11_read(0);break;
    case 49:dh11_read(1);break;
    case 50:esp8266_station_lewei_cmd();          
            zhiliang=adc_scan()+1;
            break; 
    case 70:esp8266_station_lewei_data();
            break;
    case 178:dh11_read(0);zhiliang=1+adc_scan();break;
    case 179:dh11_read(1);break;            
    case 180:esp8266_station_lewei_data();
            break;
    case 288:dh11_read(0);zhiliang=1+adc_scan();break;
    case 289:dh11_read(1);break; 
    case 290:esp8266_station_lewei_data();
            break;
    case 398:dh11_read(0);zhiliang=1+adc_scan();break;
    case 399:dh11_read(1);break;             
    case 400:esp8266_station_lewei_data();
            break;
    case 508:dh11_read(0);zhiliang=1+adc_scan();break;
    case 509:dh11_read(1);break;             
    case 510:esp8266_station_lewei_data();
            break;      
    case 520C_ODR&=~0x04;break;
    case 521C_ODR|=0X04;break;
    case 570:UART1_sendstr("AT+CIPMODE=1rn");break;

    
    case 600:UART1_sendstr("AT+CIPSTART="TCP","api.wsncloud.com",80rn");break;
    case 630:UART1_sendstr("AT+CIPSENDrn");break;
    case 648:dh11_read(0);zhiliang=1+adc_scan();break;
    case 649:dh11_read(1);break;
    case 650:esp8266_station_chuanganyun_post(1);                   
            break; 
    case 660:esp8266_station_chuanganyun_host();
            break;          
    case 750:esp8266_station_chuanganyun_post(2); 
            break;
    case 760:esp8266_station_chuanganyun_host();
            break;

    case 850:esp8266_station_chuanganyun_post(3); 
              break;
    case 860:esp8266_station_chuanganyun_host();
            break;  
    case 870C_ODR&=~0x04;break;
    case 871C_ODR|=0X04;break;
    case 920:UART1_sendstr("AT+CIPMODE=1rn");break;
    
    case 950:UART1_sendstr("AT+CIPSTART="TCP","api.yeelink.net",80rn");break;
    case 980:UART1_sendstr("AT+CIPSENDrn");break;
    case 1000:UART1_sendstr("POST /v1.0/device/19119/sensor/33294/datapoints HTTP/1.1rn");break; //温度传感器
    case 1001:UART1_sendstr("Host: api.yeelink.netrn");break;
    case 1002:UART1_sendstr("Accept: */*rn");break;
    case 1003:UART1_sendstr("U-ApiKey: 20314f31cb6934a5187f43b676be2886rn");break;
    case 1004:UART1_sendstr("Content-Length: ");esp8266_uint_to_string(10+getLength(wendu));UART1_sendstr("rn");break;
    case 1005:UART1_sendstr("Content-Type: application/x-www-form-urlencodedrnrn");break;
    case 1006:UART1_sendstr("{"value":");esp8266_uint_to_string(wendu);UART1_sendstr("}rn");break;
  
    case 1010C_ODR&=~0x04;break;
    case 1011C_ODR|=0X04;break;
    case 1060:UART1_sendstr("AT+CIPMODE=1rn");break;
    case 1080:UART1_sendstr("AT+CIPSTART="TCP","api.yeelink.net",80rn");break;
    case 1110:UART1_sendstr("AT+CIPSENDrn");break;
    case 1120:UART1_sendstr("POST /v1.0/device/19119/sensor/33705/datapoints HTTP/1.1rn");break; //温度传感器
    case 1121:UART1_sendstr("Host: api.yeelink.netrn");break;
    case 1122:UART1_sendstr("Accept: */*rn");break;
    case 1123:UART1_sendstr("U-ApiKey: 20314f31cb6934a5187f43b676be2886rn");break;
    case 1124:UART1_sendstr("Content-Length: ");esp8266_uint_to_string(10+getLength(shidu));UART1_sendstr("rn");break;
    case 1125:UART1_sendstr("Content-Type: application/x-www-form-urlencodedrnrn");break;
    case 1126:UART1_sendstr("{"value":");esp8266_uint_to_string(shidu);UART1_sendstr("}rn");break;
    case 1130C_ODR&=~0x04;break;
    case 1131C_ODR|=0X04;break;
    
    case 1170:UART1_sendstr("AT+CIPMODE=1rn");break;
   
    default:break;
    }
    if(++t3>=1200)
      t3=0;
  }
}


回复 支持 反对

使用道具 举报

3

主题

145

帖子

159

积分

注册会员

Rank: 2

积分
159
5#
发表于 2015-12-4 10:22 AM | 只看该作者

       我用的WiFi模块式网上最便宜的esp8266,机智云啥的都是用这个,可能版本不一样,功能差不多,刷下机就可以更新固件了。那我先简单介绍下本次系统用的esp8266WiFi模快。

      这是我从网上找到的关于esp8266的资料。

      然后还需要准备些软件,这里有个刷机软件,至于怎么使用,可以百度下。

      

     还有些在使用需要的串口工具。

     

回复 支持 反对

使用道具 举报

0

主题

74

帖子

12

积分

新手上路

Rank: 1

积分
12
6#
发表于 2015-12-4 10:28 AM | 只看该作者

工具还有这些    

准备了这些往往是不够的,还需要大量的实践。

回复 支持 反对

使用道具 举报

0

主题

68

帖子

6

积分

新手上路

Rank: 1

积分
6
7#
发表于 2015-12-4 10:46 AM | 只看该作者

          资料和工具还是很多,但大多比较分散,有些乱,问了下机智云的客服,他们也没有一个较为完整的文档,这个历程也不知道怎么去弄,自己琢磨太花时间了。

         一般网站提交信息和获取信息常见的方式是get和post,这个在每个网站的书写方式不一样,用裸版的单片机去与网站链接起来不得不一个一个按照网站的api格式要求提交信息,有些麻烦。我学的比较少,所以只能用嘴简单的方式链接网站了。

        yeelink的网站和其他物联网网站差不多,只是格式有些不同而已,用其网络调试助手,得到网络的信息,其发送网站的信息如下:

          GET /v1.0/device/19119/sensor/33294/datapoints HTTP/1.1

  //这句话可要可不要,并不是关键,我看ardunio程序中没有这句话
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:9.0.1) Gecko/20100101 Firefox/9.0.1   

Host: api.yeelink.net
Accept: */*
U-ApiKey: 20314f31cb6934a5187f43b676be2886   //这个是我的apikey,填上你们的就可以了。


//每句话后必须转行,且发送每句话的时间间隔在20ms意外在,这是网站上说的,最后行需要转两个转行字符,这样信息才可以发出去。那看看的程序是怎么写的吧。以下是核心代码,一个case 1120与case 1121时间间隔是0.1s,这样可以达到网站的要求,切不可以全部把这些信息发出去,没有什么结果的,对于大型网站来说,没有什么,但这些物联网平台毕竟只是小公司做的,没有什么鸟用。

 case 1120:UART1_sendstr("GET /v1.0/device/19119/sensor/33705/datapoints HTTP/1.1rn");break; //温度传感器

case 1121:UART1_sendstr("Host: api.yeelink.netrn");break;

 case 1122:UART1_sendstr("Accept: */*rn");break;
 case 1123:UART1_sendstr("U-ApiKey: 20314f31cb6934a5187f43b676be2886rn");break;

     我这是用esp8266的模式一的透传模式发送数据的,用模式3也可以,但速度慢,且有些麻烦。


回复 支持 反对

使用道具 举报

3

主题

103

帖子

55

积分

注册会员

Rank: 2

积分
55
8#
发表于 2015-12-4 10:54 AM | 只看该作者

 case 1120:UART1_sendstr("GET /v1.0/device/19119/sensor/33705/datapoints HTTP/1.1rn");break; //温度传感器

case 1121:UART1_sendstr("Host: api.yeelink.netrn");break;

 case 1122:UART1_sendstr("Accept: */*rn");break;
 case 1123:UART1_sendstr("U-ApiKey: 20314f31cb6934a5187f43b676be2886rnrn");break;

这是get请求,要等5到10秒左右会有信息接收到。

post请求也一样的,不过代码有些多了而已。

//和get方式一样,sensor后面的数字和device后面的数字需要填自己的传感器和装置代码,这里的代码是我的装置号和传感器号。

POST /v1.0/device/19119/sensor/33294/datapoints HTTP/1.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:9.0.1) Gecko/20100101 Firefox/9.0.1
Host: api.yeelink.net
Accept: */*
U-ApiKey: 20314f31cb6934a5187f43b676be2886  //这里的是我的传感器号,需要填上你的号码。
Content-Length: 12
Content-Type: application/x-www-form-urlencoded
                                    //这个一定要空行,我也不知道为什么,这个是网站的说明。
{"value":22}                //这里刚好12个字母,所以要Content-Length: 12。


程序代码也就copy一下:

   case 1120:UART1_sendstr("POST /v1.0/device/19119/sensor/33705/datapoints HTTP/1.1rn");break; //温度传感器
    case 1121:UART1_sendstr("Host: api.yeelink.netrn");break;
    case 1122:UART1_sendstr("Accept: */*rn");break;
    case 1123:UART1_sendstr("U-ApiKey: 20314f31cb6934a5187f43b676be2886rn");break;
    case 1124:UART1_sendstr("Content-Length: ");esp8266_uint_to_string(10+getLength(shidu));UART1_sendstr("rn");break;
    case 1125:UART1_sendstr("Content-Type: application/x-www-form-urlencodedrnrn");break;
    case 1126:UART1_sendstr("{"value":");esp8266_uint_to_string(shidu);UART1_sendstr("}rn");break;

回复 支持 反对

使用道具 举报

0

主题

78

帖子

4

积分

新手上路

Rank: 1

积分
4
9#
发表于 2015-12-4 10:55 AM | 只看该作者
 case 1120:UART1_sendstr("POST /v1.0/device/19119/sensor/33705/datapoints HTTP/1.1rn");break; //温度传感器
    case 1121:UART1_sendstr("Host: api.yeelink.netrn");break;
    case 1122:UART1_sendstr("Accept: */*rn");break;
    case 1123:UART1_sendstr("U-ApiKey: 20314f31cb6934a5187f43b676be2886rn");break;
    case 1124:UART1_sendstr("Content-Length: ");esp8266_uint_to_string(10+getLength(shidu));UART1_sendstr("rn");break;
    case 1125:UART1_sendstr("Content-Type: application/x-www-form-urlencodedrnrn");break;//这里是空一行的意思
    case 1126:UART1_sendstr("{"value":");esp8266_uint_to_string(shidu);UART1_sendstr("}rn");break;
回复 支持 反对

使用道具 举报

1

主题

65

帖子

9

积分

新手上路

Rank: 1

积分
9
10#
发表于 2015-12-4 11:19 AM | 只看该作者

       其他两个网站post和get的方式类似,自己可以在官网琢磨。

      这里讲下esp8266的配置。

       esp8266模式有三种,模式一ststion,模式二ap,模式三station兼容ap

      一般访问网站,连接手机用模式一或者模式三,模式二十专门连接手机的,没有用着,所以先搁置一旁。

     调试esp8266时,用独立的串口工具ttl转usb插头连接esp8266,用独立电源连接esp8266的vcc与gnd,一般也可以不用独立电源。esp8266对电源要求是80ma,usb转TTL有500ma电流承受能力,这个不是很重要。esp8266的电源是3.3v,5v接的话可能有问题。

     首先拿到模块需要初始化,注;每条命令后需要有个转行,不然没有效果,发送网站的数据根据网站的格式要求而定。esp8266的默认通信速度为115220,一停止位,无校验位。

1第一步重启

      AT+RST  //在串口输入转行后,会出现乱码。这是很正常的事,输入后5秒内出现出现乱码,然后可以向模块输入数据。这个也是模块很头疼的地方,一定要等模块空闲之后,发送的命令和数据才有效,不严需要重新输入数据或者命令。

2第二部模式选择

AT+CWMODE=3 //也可以选择模式一每次开机会保持上次的模式,需要重启模块才能改变模式

3检查周围的WiFi热点//这个需要一定时间检查,10秒内吧。

AT+CWLAP 

4将自己WiFi名字和密码填入模块内,第一次输入后下次不用输入了。

AT+CWJAP="TP-LINK_34FA","@taideng737@"

5查看是否连接上自己的WiFi热点

AT+CWJAP?

6是否开启多路由模式,这个仅可以在模式三中可以用。意思是说模块可以同时连接几个节点。(0-4)

AT+CIPMUX=1

7开启路由服务

AT+CIPSERVER=1,8080

8连接网站,多连接可以连接多个,单链接只能连接一个。

AT+CIPSTART=4,"TCP","192.168.0.102",8080   //这是无线局域网络节点
AT+CIPSTART=1,"TCP",""223.5.16.122"",80     //这是乐为联网的网站

9向网站发送数据
AT+CIPSEND=4,15// 4代表多连接连接的号,15代表药发送的数据量

10发送数据

hello world!  //如果手机连上网络,且是你无线局域网络地址192.168.0.102,就可以接受到信息了。


回复 支持 反对

使用道具 举报

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

本版积分规则

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