这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 51门生的Intel Edision开发进程贴

共42条 1/5 1 2 3 4 5 ›| 跳转至

51门生的Intel Edision开发进程贴

助工
2016-07-08 23:59:51     打赏

Intel Edision 开发进程贴

设计主要围绕着智能家居展开,总体框架为Wifi环境下工作的基于“Intel® Edison for Arduino”扩展开发板+ 增强版Grove入门开发套件的远程家电监控系统+智能手机网页控制端。

该系统的功能为:管家系统与家电通过某种通讯协议(待定)进行通讯,并实时向远程手机网页控制端进行反映,可以通过wifi与手机客户端连接,由手机网页控制端对本地家电系统进行调控,可调控的家电包括电饭锅(需要的控制单元包括:1.定时器:控制煮饭或做粥时间,2.开关部分:用于控制电饭锅开始煮饭,3.状态反馈:将电饭锅的工作状态进行反馈)、空调(需要的控制单元包括:1.定时器:控制空调的开关时间,2.开关部分:用于控制空调的开关,3.设置部分:用于控制冷热风、摇摆风、目标温度等参数的设置4. 状态反馈:将空调的工作状态进行反馈)

家电部分可以通过相应控件进行模拟,以实现相应功能的验证。


今天终于开始玩板子了,之前有点事情耽搁了一天,不过也好,不用弄开箱的东西了,嘿嘿,不过还是上一张板子的上电图片吧。

开箱调试整个按照Intel官方的说明文档来进行的,其中有个问题,就是要不要接那个外置供电端子(7V-15V DC)。官方的描述是这样的:在很多情况下,你可以单独使用设备模式线缆(也就是正视Intel Edision时上方的micro USB),然而如果有一些难以预计的情况,你电脑的USB端口在给板子供电的时候可能并不靠谱。那么这时,你可以试试:①如果你把板子连接到了笔记本上,那么需要把笔记本的交流充电器插上;②使用一个外部供电的USB 集线器。板子右上方的DC端子并不是必须的,但是是强烈建议插上用以稳定供电电压。

在此期间,需要安装一个Intel的巨大集成环境,因为下得太慢了,只能明天再更新了。。。


下面说下看过Intel说明文档后的总结的一些注意事项:首先,两个micro USB,上面的②是供电+Flash,下面的③是串口。(盗一张官网的图片)

接着是板卡USB的主从模式设置,也就是上图中的板子右侧的拨动开关,当向下拨动时,芯片处于USB设备状态,此时板子作为计算机的一个USB设备,可以在计算机上对Edision进行编程等操作。当向上拨动,芯片处于主机状态,这个时候Edision就作为主机,可以外接其它的USB设备,但是此时板子不再接受由micro USB的供电,只能通过外接的DC端子对开发板供电。




高工
2016-07-09 00:31:10     打赏
2楼
不错不错~ 一连usb小灯就亮了,旗开得胜呀!

院士
2016-07-09 10:35:05     打赏
3楼

真棒~~

提示大家注意事项


高工
2016-07-16 11:02:31     打赏
4楼
不错不错

专家
2016-07-16 16:39:13     打赏
5楼
加油

助工
2016-08-04 19:44:52     打赏
6楼

开工啦,先是对Edison开发板的外围学习,下面的这个链接是Edison配套的Grove套装所涉及到的小元件的Ardiuno源程序,可以用来测试选用。

https://github.com/Seeed-Studio/Sketchbook_Starter_Kit_V2.0

虽然很不情愿,但目测Edison是绕不开Linux了,开始一口一口啃吧,从puddy开始,连接给出(仅仅用来学习。。。。。。):

http://pan.baidu.com/s/1qWnw22C

接下来就是跟随DFROBOT上的孙毅大神学习Edison的基本功能了。这就是孙大圣在DFROBOT上的教程检索连接,有很强的学习意义啊,里面包括固件更新、开发环境搭建以及一些简单的如WiFi连接EdisonUSB以太网连接Edison等实例。

http://www.dfrobot.com.cn/community/thread-12556-1-1.html

 

 

 

用到的putty下命令汇总(持续更新)

configure_edison --enableOneTimeSetup   //开启AP模式

configure_edison --password //设置AP模式下的密码

configure_edison --disableOneTimeSetup   //关闭AP模式

configure_edison --wifi //设置wifi

Ifconfig //查看ip信息

 

     然后大概捋了一下工作思路,将手机app的制作换成了微信客户端,通过选用新浪服务器,于微信对接,可以用手机来实现对服务器上的数据的读取于控制,而Edison可以通过wifi读取新浪服务器上的数据,从而对室内的电器进行控制,明天继续,加油!


助工
2016-08-04 19:47:16     打赏
7楼

通过对功能的适当裁减,最终选取了配件中的led灯、温度传感器以及继电器模块。

对于电饭锅的模拟中,可以设置定时器1hour3hours8hours,电饭锅工作状态指示灯(用继电器表示),工作状态控制有加热和关闭,通过继电器的开关来反映。

空调的模拟中,通过红色led灯来表示空调的实际送风情况,用温度传感器来对室内的实时温度进行测量。

整体效果图如下图所示。系统搭建已经完成,下一步开始搞程序啦。


助工
2016-08-04 21:16:34     打赏
8楼

之前打算使用乐联网的那套东西,(不是打广告哈),但后来因为程序移植的问题没搞通,就决定用书中介绍的路由器虚拟服务器的方式,通过在Edison本地搭建服务器,由路由器进行虚拟实现公网访问的功能。

首先是Edison连接Wifi,程序里连接了SSID为HiWiFi_29CC12_5G,WIFI密码为213471118,程序里通过设置串口进行监控,并反馈Edison得到的IP地址等信息。成功连接Wifi后的提示如下图所示。

之后就是建立Edison上服务器的过程,话不多说直接上代码。

这里插一嘴,代码里,pinTemp为温度输入端A0,pinCook为电饭锅的控制引脚,pinAir为空调送风控制引脚。


#include <WiFi.h>
//wifi config
int status = WL_IDLE_STATUS;
WiFiServer server(8080);

//temp config
const int pinTemp = A0;
const int B = 3975;

//config common
const int pinCook = 2;
const int pinAir = 3;
int cook = 0; //电饭锅控制
int cook_time = 0;//电饭锅定时
int air_state = 0;//空调开关状态
int air_work = 0;//空调工作状态
float air_tem_now;//室内当前温度
int air_tem_send=26;//空调设置温度
int air_tem_mode = 0;//冷风暖风设置,0为冷风,1为暖风
int air_rotate = 0;//摆动设置,0为关闭,1为开启
下面是setup()内容
void setup() {
  // put your setup code here, to run once:
  pinMode(pinCook, OUTPUT);
  pinMode(pinAir, OUTPUT);
  Serial.begin(9600);
  while(status != WL_CONNECTED)
  {
    Serial.print("Attempting to connect to Network named ");
    Serial.println("HiWiFi_29CC12_5G");
    status = WiFi.begin("HiWiFi_29CC12_5G","213471118");
    delay(10000);
  }
  Serial.print("SSID:");
  Serial.println(WiFi.SSID());
  IPAddress ip=WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);
  server.begin();
}
这里对串口进行了初始化,以及服务器的初始化和WIFI的连接。loop循环下次啦

专家
2016-08-05 08:20:50     打赏
9楼
占楼啦

助工
2016-08-16 12:22:48     打赏
10楼

下面是loop循环的内容

void loop() {
  // put your main code here, to run repeatedly:
  WiFiClient client = server.available();
  air_tem_now = gettem();
  if(client)
  {
    Serial.println("new client");
    String currentLine = "";
    while(client.connected())
    {
      if(client.available())
      {
        char c = client.read();
        Serial.write(c);
        if(c == '\n')
        {
          if(currentLine.length() == 0)
          {
            server.println("<html>");
            server.println("<head>");
            server.println("<title>Intel® Edison for Arduino Manager</title>");
            server.println("<meta http-equiv=\"refresh\" content=\"5\">");
            server.println("</head>");
            server.println("<body>");
            server.println("<h1>Manager</h1>");
            server.println("<h2>cook</h2>");
            server.println("Timing:  <a href=\"/onehour\">1 hour</a>  <a href=\"/threehours\">3 hour</a>  <a href=\"/eighthours\">8 hour</a> <br>");
            server.print("Working state:");
            if(cook==0)
            {
              server.print("<img src=\"http://www.dabaoku.com/sucai/shejilei/shuijinganniu/Xbutton1.jpg\"/>");
            }
            else
            {
              server.print("<img src=\"http://www.dabaoku.com/sucai/shejilei/shuijinganniu/Xbutton26.jpg\"/>");
            }
            server.print("<a href=\"/cook_ON\">[turn ON] </a>            ");
            server.println("<a href=\"/cook_OFF\">[turn OFF]</a> <br>");
            
            server.println("<h2>air</h2>");
            server.print("Working state:");
            if(air_state==0)
            {
              server.print("<img src=\"http://www.dabaoku.com/sucai/shejilei/shuijinganniu/Xbutton1.jpg\"/>");
            }
            else
            {
              server.print("<img src=\"http://www.dabaoku.com/sucai/shejilei/shuijinganniu/Xbutton26.jpg\"/>");
            }
            server.print("tem_for_now : ");
            server.println(air_tem_now);
            server.print("tem_for_contrl : ");
            server.print(air_tem_send);
            server.print("       ");
            server.print("<a href=\"/air_Add\">[Increase one digree]</a>");
            server.print("       ");
            server.println("<a href=\"/air_Los\">[Decrease one digree]</a> <br>");
            server.println("<br></br>");
            server.print("<a href=\"/air_ON\">[turn ON] </a>");
            server.print("       ");
            server.println("<a href=\"/air_OFF\">[turn OFF]</a> <br>");         
            if(air_tem_mode == 0)
            {
              server.println("<a href=\"/cold\">[cold]</a><br>");
            }
            else
            {
              server.println("<a href=\"/warm\">[warm]</a><br>");
            }
            server.println("</body>");
            server.println("</html>");
            server.println();
            break;
          }
          else
          {
            currentLine = "";
          }
        }
        else if(c != '\r')
        {
          currentLine += c;
          if(currentLine.endsWith("GET /cook_ON"))                          //电饭锅开关
          {
            digitalWrite(pinCook,HIGH);
            cook = 1;
          }
          if(currentLine.endsWith("GET /cook_OFF"))
          {
            digitalWrite(pinCook,LOW);
            cook = 0;
          }
          if(currentLine.endsWith("GET /air_ON"))                           //空调开关
          {
            air_state = 1;
          }
          if(currentLine.endsWith("GET /air_OFF"))
          {
            air_state = 0;
          }
          if(currentLine.endsWith("GET /air_Add"))                          //空调温度设置
          {
            if(air_tem_send<30)
              air_tem_send += 1;
          }
          if(currentLine.endsWith("GET /air_Los"))
          {
            if(air_tem_send > 16)
              air_tem_send -= 1;
          }
          if(currentLine.endsWith("GET /cold"))                           //空调冷暖风设置
          {
            air_tem_mode = 1;
          }
          if(currentLine.endsWith("GET /warm"))
          {
            air_tem_mode = 0;
          }
        }
      }
    }
    client.stop();
    Serial.println("client disconnected");
  }
  if(air_tem_mode == 0)
  {
    if((air_tem_send-1 < air_tem_now) && (air_state == 1))
    {
      air_work = 1;
      digitalWrite(pinAir, HIGH);     
    }
    else if((air_tem_send +1 > air_tem_now) || (air_state == 0))
    {
      air_work = 0;
      digitalWrite(pinAir, LOW);
    }
  }
  else
  {
    if((air_tem_send+1 > air_tem_now) && (air_state == 1))
    {
      air_work = 1;
      digitalWrite(pinAir, HIGH);     
    }
    else if((air_tem_send-1 < air_tem_now) || (air_state == 0))
    {
      air_work = 0;
      digitalWrite(pinAir, LOW);
    }
  }
}

 

最后是温度读取函数。

float gettem(void)
{
   // Get the (raw) value of the temperature sensor.
    int val = analogRead(pinTemp);

    // Determine the current resistance of the thermistor based on the sensor value.
    float resistance = (float)(1023-val)*10000/val;

    // Calculate the temperature based on the resistance value.
    float temperature = 1/(log(resistance/10000)/B+1/298.15)-273.15;

    return temperature;
}

 

这就是全部的实现代码。下面就来看看实现效果如何,嘿嘿



共42条 1/5 1 2 3 4 5 ›| 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]