SHARE
TWEET

GroveStreams Electric Imp Device

mikecmills2 Jun 17th, 2014 1,939 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Electric Imp Device Code for GroveStreams Example
  2. // A full "how to" guide for this agent can be found at https://www.grovestreams.com/developers/getting_started_elec_imp_temp.html
  3. //
  4.  
  5. // License:
  6. //  Copyright 2014 GroveStreams LLC.
  7. //  Licensed under the Apache License, Version 2.0 (the "License");
  8. //  you may not use this file except in compliance with the License.
  9. //  You may obtain a copy of the License at: http://www.apache.org/licenses/LICENSE-2.0
  10. //
  11. //  Unless required by applicable law or agreed to in writing, software
  12. //  distributed under the License is distributed on an "AS IS" BASIS,
  13. //  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. //  See the License for the specific language governing permissions and
  15. //  limitations under the License.
  16.  
  17. // Read data from MAX31855 chip on Adafruit breakout boards
  18. // Code developed by Electric Imp Forum members rivers,
  19. // mjkuwp94, Brown, as well as Hugo, peter, and others.
  20. // Modified for use by Mike Mills.
  21. //      pins:
  22. //      imp 1 CLK
  23. //      imp 2 CS
  24. //      imp 5 UNASSIGNED
  25. //      imp 7 UNASSIGNED
  26. //      imp 8 UNASSIGNED
  27. //      imp 9 DO
  28.  
  29. //Configure Pins
  30. hardware.spi189.configure(MSB_FIRST | CLOCK_IDLE_LOW , 1000);
  31. hardware.pin2.configure(DIGITAL_OUT); //chip select
  32.  
  33. // define variables
  34. temp32 <- 0;
  35. farenheit <- 0;
  36. celcius <- 0;
  37.  
  38. //Define functions
  39. function readChip189(){
  40.         //Get SPI data
  41.     hardware.pin2.write(0); //pull CS low to start the transmission of temp data  
  42.       //0[31..24],1[23..16],2[15..8],3[7..0]
  43.         temp32=hardware.spi189.readblob(4);//SPI read is totally completed here
  44.     hardware.pin2.write(1); // pull CS high
  45.         // Begin converting Binary data for chip 1
  46.     local tc = 0;
  47.     if ((temp32[1] & 1) ==1){
  48.         //Error bit is set
  49.                 local errorcode = (temp32[3] & 7);// 7 is B00000111
  50.                 local TCErrCount = 0;
  51.                 if (errorcode>0){
  52.                         //One or more of the three error bits is set
  53.                         //B00000001 open circuit
  54.                         //B00000010 short to ground
  55.                         //B00000100 short to VCC
  56.                         switch (errorcode){            
  57.             case 1:
  58.                 server.log("TC open circuit");
  59.                             break;
  60.                         case 2:        
  61.                 server.log("TC short to ground");
  62.                             break;          
  63.             case 3:          
  64.                 server.log("TC open circuit and short to ground")
  65.                 break;
  66.                         case 4:        
  67.                 server.log("TC short to VCC");
  68.                             break;
  69.                         default:          
  70.                 //Bad coding error if you get here
  71.                             break;
  72.                         }
  73.                         TCErrCount+=1;
  74.                         //if there is a fault return this number, or another number of your choice
  75.                          tc= 67108864;
  76.                 }
  77.             else
  78.         {
  79.              server.log("error in SPI read");
  80.         }      
  81.         }
  82.         else //No Error code raised
  83.         {
  84.                 local highbyte =(temp32[0]<<6); //move 8 bits to the left 6 places
  85.                 local lowbyte = (temp32[1]>>2); //move to the right two places 
  86.                 tc = highbyte | lowbyte; //now have right-justifed 14 bits but the 14th digit is the sign    
  87.                 //Shifting the bits to make sure negative numbers are handled
  88.         //Get the sign indicator into position 31 of the signed 32-bit integer
  89.         //Then, scale the number back down, the right-shift operator of squirrel/impOS
  90.         tc = ((tc<<18)>>18);
  91.         // Convert to Celcius
  92.                     celcius = (1.0* tc/4.0);
  93.         // Convert to Farenheit
  94.         farenheit = (((celcius*9)/5)+32);
  95.         server.log(celcius + "°C");
  96.         server.log(farenheit + "°F");
  97.        
  98.         //Gather and pass the data to the Electric Imp Agent running in the cloud
  99.         local data = { id = hardware.getimpeeid(), mac = imp.getmacaddress(), temp = farenheit, voltage = hardware.voltage()}
  100.         agent.send("GroveStreams", data);
  101.        
  102.         imp.wakeup(20, readChip189); //Wakeup every 20 second and read data. Change this value to change your sample frequency.
  103.         }
  104. }
  105.  
  106.  
  107. //Begin executing program
  108. hardware.pin2.write(1); //Set the Chip Select pin to HIGH prior to SPI read
  109. readChip189();          //Read SPI data
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top