顯示具有 wifi 標籤的文章。 顯示所有文章
顯示具有 wifi 標籤的文章。 顯示所有文章

2015年2月9日 星期一

CC3200 使用

這是歷經各種加熱的模組....
總算能上code了,加了兩個東西,
第一個是reset button,我當初設計的時候想說這東西應該不常用才是,結果實際上傳的時候才發現說他會要求reset device....然後把tact sw放上去之後才發現這空間有點尷尬,快要擠到天線的走線了
第二個是切換UART上傳,和正常模式的switch,我原本以為說只要選其中之一就好,結果才發現要做切換....所以就把一個SMD的切換開關黏在Debug那排針的後面
 然後先從上code的手續開始,就直接用uniflash選擇要的bin檔,之後按program,會要求reset,這時候按下reset 3s就可以了.
然後這是AP mode打開之後進去的config webpage

CC3200MOD CC3100MOD Breakout board

 
於是Ti又出了下一代的CC3200與CC3100,但是有鑑於前一次CC3000,這兩個新的IC都只有QFN封裝的版本,原本我也打算用QFN來試試看,但是一畫完原理圖就.....覺得還是算惹.

所以就等到Ti出了module版本之後才開始做板子,與CC3000相比較之下的話,這次的PIN密度高很多,大概是因為要容納CC3200本身MCU的Debug和IO pin,板子當初設定是以比較複雜的CC3200MOD為優先,設計上與CC3200MOD Launchpad 接近,

UART轉USB的IC挑的是CP2102,之前用過覺得還不錯,與CH340比起來,少一個震盪器,而且價錢也沒高多少
比較大的問題反而是出在LDO的部分,因為這模組"瞬間"耗電量會到0.5A,所以LDO當然不能太弱,手邊最大的SOT-23只有400ma的,也只好上了,希望這個大電容撐得住

 



2014年8月10日 星期日

CC3000 Breakout board

首先是第一版:
這一版就是https://github.com/kuym/TICC3000Breakout
用的是PCB天線,而不是陶瓷天線,可以省下一些找料件的麻煩,但是這一版有很大的問題
那就是天線走線竟然有90度的直角出現 = =" 而且我沒注意到就直接送洗了....
第二版改成用u.fl直接接出來,省的麻煩,天線走線也改了一下
還有就是把I2C接腳拉出來
另外就是電源的部分,
CC3000需要兩個供電,一個是VBAT,是主要的供電,會輸入到內建的Step-down轉成1.8V左右
Input range 是2.7~4.8
另一個則是VIO,主要是供應內建的電平轉換IC將1.8V的通訊轉換成VIO的電平,Input range是1.8~3.6V
結果我看到一堆CC3000 breakout 都是兩個接再一起再用一個3.3V的LDO解決
問題是我現在的使用方式都是接上鋰電池使用,電壓在3~4.2V,那為啥不直接接到VBAT去就好了,還要經過LDO轉3.3V再用DC-DC轉成1.8V?這樣有點浪費了
所以我把3.3V的部分直接導到VBAT,再用一個LDO給VIO使用,中間留有一個Jumpper可以把兩個短接保留原先的電路設計
我想這次重點有兩個,第一個是天線走線的設計,
另外一個就是CC3000的焊接了,這次我買了一個熱風槍來焊接,
先在兩個零件都上錫,再用熱風槍吹阿吹的,融化了之後就會發現他沉下去,而且稍微一動一下還會回彈,這時候輕壓一下就焊接完了
重點是錫不能上太多,不然輕壓的時候就會溢到另外一隻腳就短路了
還有最後一個重點,有的時候CC3000沒辦法用不是因為他壞了,有的時候是線的問題......
這害我誤以為我焊接壞了...然後又拿去Rework...
最後一點...光華沒有U.FL的天線座不用找了 = =


2014年6月24日 星期二

Arduino 氣象站 Ver4.2 WIFI

簡單來說,我之前做的WIFI氣象站都遇到了一個問題,那就是傳送時間太太太久了,
最初是直接修改Adafruit的Code,沿用.Json的格式,之後為了改進傳送速度,改成了.Csv的格式
但是之後就一直沒有辦法再壓低時間,啟動時間還是將近25s,算下來再耗電量貢獻了90%以上,
待機耗電量的影響幾乎消失,耗電量的主導權也在啟動時間上面,

之後FB上有人推薦用MQTT這個Protocol,可以顯著的壓低傳送的資料量,於是這次改版的重點就是將Xively的上傳資料方式從Http改成MQTT

首先是把程式先宣告
cc3000_PubSubClient mqttclient(ip, 1883, callback, client, cc3000);
再來就是用Adafruit的CC3000 library連上Xively的Server,他提供給MQTT的Port是1883
client = cc3000.connectTCP(ip,1883);
接下來是用MQTT library連接 Xively的HOST:
mqttclient.connect("隨便一個名子", "API_KEY填到這裡", "");
最後就可以用mqttclient.publish("/v2/feeds/FEED_ID填這裡.csv", buf);
要注意的是,檔案格式也有.JSON,.XML還有.CSV, Buf限定Char array
這樣就可以了

於是這樣一改,啟動時間從25s下降變成3~5s,顯著地降低耗電量,接下來就是另外一個問題了,
我的測試中,CC3000似乎不能直接用IP連結HOST,非得要先DNS Lookup才能上傳資料,這大概是接下來要研究的問題了

(Update這個問題,我發現是因為檢查有沒有連上AP的Flag在斷線後沒有清掉,導致還沒連線成功就開TCP Socket就失敗了


2014年4月18日 星期五

Arduino 氣象站 Ver4.1 WIFI

總之改了兩件事,第一個是把溼度計換掉!!!!
DHT系列我不會再用了 BJ4
換成SHT21,重回i2C的世界真美好
固態電容後面那個黑板子就是新的溼度計,超棒的
第二件事是想辦法降低CC3000的耗電量,為此我把他連上AP的方式改成用Smartconfig,這樣就可以跳過AP scan而且能夠在兩三秒內連上AP,我原本想要用Fast connect的功能但是怎麼試都有問題 = =

於是啟動時間從80s降到25s,平均耗電量下降到4.4mA
有趣的是待機狀態下其實DS2764算起來占了一半的耗電量,所以我就拿掉了,把待機耗電量壓到0.15mA,BUT這還是有點問題啊....明明Arduino只有1uA其他的149uA打哪來的??我還需要研究看看

至於供電選擇,由於待機狀況下行動電源不會輸出,所以勢必需要直接接鋰電池運作
不過可能有些人發現了一件事,我用的是Arduino mini pro 16Mhz的版本欸,所以其實還有一個5V升壓的板子?
其實沒有,因為Step-up的模組在極低耗電量的狀況下效率奇差,除非經過特別處裡否則會悲劇
所以就算惹,直接接上3.7V,雖然這超出規格就是了,同時因為我的Mini pro是"3.7V"的電壓準位
和3.3V的CC3000中間還是要加TXB電壓準位轉換,而BMP085和SHT21就不用了,板子上都幫我處裡好了(打到這裡,我突然想到一件事.....待機耗電量是不是這裡出了問題?註記一下研究目標)

現在1000mAh的電池就可以撐8天還可以,雖然看到別人是拿1400mAh撐2年(你怎麼做到的QAQ)
而耗電量是經由DS2764板子來檢測的:
用另外一個Arduino每1ms讀取一次DS2764的資料後,丟到Serial port給Python的程式記錄在CSV檔裡面,再丟到EXCEL分析
大概先這樣吧,我Layout了這個版本:
但是我不會,目前也沒有工具焊接CC3000模組,所以我先練習把CC3000 Breakout board焊接起來再說吧:



2014年4月12日 星期六

Arduino 氣象站 Ver4.0 WIFI

第三次改版,最大的特色是他經由WIFI 模組,可以直接上傳資料,而不用像前兩代需要一個網路中繼器做資料上傳
Wifi模組使用的是Ti新出的低價Wifi模組CC3000,經由SPI連接到Arduino
搭載溫濕度計以及一個氣壓計,還有一個鋰電池電量計

 首先這版遇到了第一個問題就是CC3000的Driver非常容易當掉,DNS查詢也會當,送資料也會當,開Socket也會當,幾乎是送資料幾次就會出問題,所以為了解決問題,就用了AVR中的Watchdog reset,一旦某段程式碼超出時間,就會全部RESET,所以加上去就可以解決當機

但是當然沒這麼簡單......
我第一次用的是Arduino mini pro 3.3v 8MHZ的版本,上傳帶有WDT的程式碼之後,第一次的RESET就當機了,Pin 13一直閃阿閃的,結果是Mini Pro的Bootloader不會解除WDT,所以就一直RESET下去.....
於是我就刷了Optiboot,但是造成我沒辦法上傳程式碼....,問題解決不了的狀態阿...
但是同篇文章有提到,UNO的Bootloader沒有這個問題,於是我就拿了一個5V 16MHZ版本刷UNO的韌體後測試WDT,終於解決了一直RESET,但是這樣我就需要加一個轉接版,因為CC3000模組需要3.3V的介面,於是手邊的TXB0104上轉接版,就這樣繞了好大一圈解決CC3000當機的問題
程式碼到處都是wdt_enable(WDTO_8S) + wdt_reset() + wdt_disable好愉悅,

再來就是資料上傳的問題,我用的是Adafruit的DHT22+Xively的程式碼,但是他的上傳資料格式是.JSON,哩哩辣辣一堆字要上傳,徒增資料量,而且不好看.WDT最久也只有8秒,害我要切成三分資料上傳中間才能插_reset,於是我改成用.CSV的格式上傳,資料量從一百多變成五十幾,省下不少時間,最重要的是我看得懂該怎麼再加東西進去....

之後是耗電量的問題,CC3000是個耗電的怪獸,大約150mA,這等級的怪獸嚴重影響資料上傳的間格,從30s拖到800s,才能稍微接近和第二版的使用時間,而待機的時候,耗電量也需要降低,所以我把Mini pro的LED以及LDO通通拿下來,自己找了一個低耗電的LDO上場,然後DHT22切掉電源
最後待機大約0.5mA,應該還可以再低一些,我可能要把CC3000的電源也全部切掉剩下Mini Pro(單獨的話我量到10uA)

耗電量的問題也和最後的供電系統有關,我等等再來說明(你可以發現上面兩張圖的電源供應選擇其實不一樣)先這樣