完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 王鹏123 于 2018-3-30 21:04 编辑
共享充电宝|共享电动车|共享净化器|共享设备 产品设计方案 发布:西安紫墨智能科技有限公司 一、共享设备硬件设计原理及功能 测试板背面 测试版正面 测试版是基于stc15wf408s单片机,sim808GPRS芯片,供电电压DC4v-60v宽电压设计,可采集设备电量,使用时间,GPS定位,速度,震动,开关信号,反馈信号等多种数据采集。 protel dxp 部分原理图如下: 单片机原理图 sim808原理图 keil c 单片机部分源程序: #include "string.h" { u8 res,status,adc_data; int adc_data_int; char *adc_s; char adc_sz[4];//字符串 //u8 s[5]; // char *pps1,*pps2; xdata char message[80]; //char *pp1; /* char *sss="+CGNSINF: 0,,,,,,,,,,,,,,,,,,,,"; char *lll="+CGNSINF:"; //char *l="" char *ppp,*ccc; u8 i,ddd; //={0x2B,0x43,0x47,0x4E,0x53,0x49,0x4E,0x46,0x3A,0x20,0x30,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C} u8 USART2_RX_BUF1[100]; */ // delay_ms(1000); GPIO_config(); //Uart1Init(); Uart2Init(); Timer0Init(); InitADC(); //初始化ADC //震动传感器中断 //INT0 = 1; IT0 = 0; //设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿) EX0 = 1; //使能INT0中断 EA=1; //开总中断 /* adc=243; adc_data=(int)adc; sprintf(sz, "%d", adc_data); //p1=(char*)strstr((const char*)USART2_RX_BUF,"+CGNSINF:"); s=(char*)sz; //s="abcdef"; message[0]='2'; sprintf((char*)message+5,",%s",(u8*)s); //纬度 */ //sprintf(s, "%d", adc_data); // message[0]='8'; // sprintf((char*)message+1,",%s","243"); //纬度 // pps1="dsasdfasdf" ; // pps2="dsasdfasdf" ; //TIM_SetCounter(); //TR0=1;//定时器 /* TMOD=0X01; TH0=0xd8; TL0=0xf0; IE=0x82; TR0=1; P12=0; */ //sprintf((char*)dtbuf1,"AT+CIPSTART="TCP","%s","%s"rn","www.baidu.com","2317"); /* for(lb=0;lb<100;lb++) { P12=1; delay_ms(10); P12=0; delay_ms(10); P13=1; delay_ms(5); P13=0; delay_ms(5); } */ P12=0; P13=0; P14=0; P15=0; // USART2_RX_STA=0;USART2_RX_REC_ATCOMMAD=1; //UART2_SendString(0x12); //delay_ms(1000); //sprintf((char*)dtbuf,"AT+CIPSTART="TCP","%s","%s"rn",IP_ADD,COM); //pp2=strtok((pp1),","); //USART2_RX_BUF1[31]={0x2B,0x43,0x47,0x4E,0x53,0x49,0x4E,0x46,0x3A,0x20,0x30,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C,0x2C}; /*USART2_RX_BUF1[0]=0x00; USART2_RX_BUF1[1]=char(0x2B); USART2_RX_BUF1[2]=0x43; USART2_RX_BUF1[3]=0x47; USART2_RX_BUF1[4]=0x4E; USART2_RX_BUF1[5]=0x53; USART2_RX_BUF1[6]=0x49; USART2_RX_BUF1[7]=0x4e; USART2_RX_BUF1[8]=0x46; USART2_RX_BUF1[9]=0x3a; USART2_RX_BUF1[10]=0x20; USART2_RX_BUF1[11]=0x30; USART2_RX_BUF1[12]=0x2c; USART2_RX_BUF1[13]=0x2c; USART2_RX_BUF1[14]=0x2c; USART2_RX_BUF1[15]=0x2c; //USART2_RX_BUF[12]=0x2c; ppp=strstr(sss,lll); ddd=strstr((const char*)USART2_RX_BUF1,"N"); if (ppp!=NULL) { // for(i=0;i<16;i++) // { //UART2_SendData(USART2_RX_BUF1); //(u8 *)ppp (const char*)USART2_RX_BUF //UART2_SendString(ddd); //} //UART2_SendData(0x0D); //UART2_SendData(0x0A); delay_ms(1000); } //UART2_SendData(0x13); //(u8 *)ppp while(1) { ; } */ res=1; while(res) { res=GSM_Dect(); } res=1; while(res) { res=SIM900A_CONNECT_SERVER_SEND_INFOR(); //实际应用时,只需要更改此处的服务器地址即可 AT+CIPSTART="TCP","1iv6668777.51mypc.cn",19012 } SIM900A_GPRS_SEND_DATA("welcome!!"); //可更改为自己想要发送的内容 //SIM900A_GPRS_SEND_DATA((u8 *)adc_data); //res=1; /* while(1) { if(Flag_Rec_TCP==1) //收到服务器下发的数据 { Flag_Rec_TCP=0; res=SIM_HANDLE_TCP_CMD();//解析命令 if(res) { if(res==1) P12=1; else if(res==2) P12=0; } } }*/ |
|
相关推荐
|
|
二、上位机接口与源码
上位机多线程socket,C#.net开发 物联网接口c#.net c#.net源码 三、Php,mysql,ajax,javascript,微信支付源码 PHp: require_once "../lib/WxPay.Api.php"; /** * * JSAPI支付实现类 * 该类实现了从微信公众平台获取code、通过code获取openid和access_token、 * 生成jsapi支付js接口所需的参数、生成获取共享收货地址所需的参数 * * 该类是微信支付提供的样例程序,商户可根据自己的需求修改,或者使用lib中的api自行开发 * * @author widy unifiedOrder * */ class JsApiPay { /** * * 网页授权接口微信服务器返回的数据,返回样例如下 * { * "access_token":"ACCESS_TOKEN", * "expires_in":7200, * "refresh_token":"REFRESH_TOKEN", * "openid":"OPENID", * "scope":"SCOPE", * "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL" * } * 其中access_token可用于获取共享收货地址 * openid是微信支付jsapi支付接口必须的参数 * @Var array */ public $data = null; /** * * 通过跳转获取用户的openid,跳转流程如下: * 1、设置自己需要调回的url及其其他参数,跳转到微信服务器 * 2、微信服务处理完成之后会跳转回用户redirect_uri地址,此时会带上一些参数,如:code * * @Return 用户的openid */ public function GetOpenid() { //通过code获得openid if (!isset($_GET['code'])){ //触发微信返回code码 $baseUrl = urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].$_SERVER['QUERY_STRING']); //print_r($baseUrl); $url = $this->__CreateOauthUrlForCode($baseUrl); Header("Location: $url"); exit(); } else { //获取code码,以获取openid $code = $_GET['code']; //echo $code; if (isset($code) && !isset($_SESSION['openid'])) { $_SESSION['code'] = $code; $openid = $this->getOpenidFromMp($code); $_SESSION['openid'] = $openid; //echo $code." "; //echo $_SESSION['openid']; } $openid=$_SESSION['openid']; //echo $code." "; //echo $_SESSION['openid']; //echo $openid; return $openid; } } |
|
|
|
|
|
/**
* * 获取jsapi支付的参数 * @param array $UnifiedOrderResult 统一支付接口返回的数据 * @throws WxPayException * * @return json数据,可直接填入js函数作为参数 */ public function GetJsApiParameters($UnifiedOrderResult) { if(!array_key_exists("appid", $UnifiedOrderResult) || !array_key_exists("prepay_id", $UnifiedOrderResult) || $UnifiedOrderResult['prepay_id'] == "") { throw new WxPayException("参数错误"); } $jsapi = new WxPayJsApiPay(); $jsapi->SetAppid($UnifiedOrderResult["appid"]); $timeStamp = time(); $jsapi->SetTimeStamp("$timeStamp"); $jsapi->SetNonceStr(WxPayApi::getNonceStr()); $jsapi->SetPackage("prepay_id=" . $UnifiedOrderResult['prepay_id']); $jsapi->SetSignType("MD5"); $jsapi->SetPaySign($jsapi->MakeSign()); $parameters = json_encode($jsapi->GetValues()); return $parameters; } /** * * 通过code从工作平台获取openid机器access_token * @param string $code 微信跳转回来带上的code * * @return openid */ public function GetOpenidFromMp($code) { $url = $this->__CreateOauthUrlForOpenid($code); //初始化curl $ch = curl_init(); //设置超时 //curl_setopt($ch, CURLOPT_TIMEOUT, $this->curl_timeout); curl_setopt($ch, CURLOPT_TIMEOUT, 60); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,FALSE); curl_setopt($ch, CURLOPT_HEADER, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); if(WxPayConfig::CURL_PROXY_HOST != "0.0.0.0" && WxPayConfig::CURL_PROXY_PORT != 0){ curl_setopt($ch,CURLOPT_PROXY, WxPayConfig::CURL_PROXY_HOST); curl_setopt($ch,CURLOPT_PROXYPORT, WxPayConfig::CURL_PROXY_PORT); } //运行curl,结果以jason形式返回 $res = curl_exec($ch); curl_close($ch); //取出openid $data = json_decode($res,true); $this->data = $data; $openid = $data['openid']; return $openid; } /** * * 拼接签名字符串 * @param array $urlObj * * @return 返回已经拼接好的字符串 */ private function ToUrlParams($urlObj) { $buff = ""; foreach ($urlObj as $k => $v) { if($k != "sign"){ $buff .= $k . "=" . $v . "&"; } } |
|
|
|
|
|
$buff = trim($buff, "&"); return $buff; } /** * * 获取地址js参数 * * @return 获取共享收货地址js函数需要的参数,json格式可以直接做参数使用 */ public function GetEditAddressParameters() { $getData = $this->data; $data = array(); $data["appid"] = WxPayConfig::APPID; $data["url"] = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; $time = time(); $data["timestamp"] = "$time"; $data["noncestr"] = "1234568"; $data["accesstoken"] = $getData["access_token"]; ksort($data); $params = $this->ToUrlParams($data); $addrSign = sha1($params); $afterData = array( "addrSign" => $addrSign, "signType" => "sha1", "scope" => "jsapi_address", "appId" => WxPayConfig::APPID, "timeStamp" => $data["timestamp"], "nonceStr" => $data["noncestr"] ); $parameters = json_encode($afterData); return $parameters; } |
|
|
|
|
|
/** * * 构造获取code的url连接 * @param string $redirectUrl 微信服务器回跳的url,需要url编码 * * @return 返回构造好的url */ private function __CreateOauthUrlForCode($redirectUrl) { $urlObj["appid"] = WxPayConfig::APPID; $urlObj["redirect_uri"] = "$redirectUrl"; $urlObj["response_type"] = "code"; $urlObj["scope"] = "snsapi_base"; $urlObj["state"] = "STATE"."#wechat_redirect"; $bizString = $this->ToUrlParams($urlObj); } /** * * 构造获取open和access_toke的url地址 * @param string $code,微信跳转带回的code * * @return 请求的url */ private function __CreateOauthUrlForOpenid($code) { $urlObj["appid"] = WxPayConfig::APPID; $urlObj["secret"] = WxPayConfig::APPSECRET; $urlObj["code"] = $code; $urlObj["grant_type"] = "authorization_code"; $bizString = $this->ToUrlParams($urlObj); } } 微信支付测试界面 微信支付测试界面 四、流程 微信扫码-支付1分钱-Php后台检测到支付成功-通过tcp/ip发送数据-sim808接收数据-单片机处理数据-设备运行 注:终端sim808单片机的tcp/ip地址是变化的,上位机不能固定找到终端,只能通过终端找到上位机然后进行通讯工作 |
|
|
|
|
|
1465 浏览 1 评论
3324 浏览 1 评论
8154 浏览 0 评论
1970 浏览 0 评论
VL53L5CX #高达 8x8 多区域测距和 63°对角线宽视场 飞行时间多区域测距传感器
17363 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 00:51 , Processed in 0.650052 second(s), Total 81, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号